我应该在DynamoDB中验证关系吗?

时间:2019-04-26 16:11:36

标签: rest aws-lambda nosql amazon-dynamodb

可以说我有一个users可以制作posts的应用程序。我使用以下设计将它们存储在单个DynamoDB表中:

+--------+--------+---------------------------+
| PK     | SK     | (Attributes)              |
+-----------------+---------------------------+
| UserId | UserId | username, profile, etc... |  <-- user item
| UserId | PostId | body, timestamp, etc...   |  <-- post item
+--------+--------+---------------------------+

user产生post时,我的Lambda函数接收以下数据:

{
  "userId": <UserId>",
  "body": <Body>,
  etc...
}

我的问题是,在使用userpost添加到表中之前,我应该先验证dynamodb.get({PK: userId, SK: userId)是否存在吗?这样可以确保不会有任何孤立的posts,但是该函数将需要一个读写单元。

我的一个想法是只写post,可能允许孤立的posts。然后,我可以使用另一个Lambda函数,该函数会定期运行以查找和删除任何孤儿。

这显然是一个简单的情况,但请想象一个对象具有多个关系的更复杂的系统。在这些情况下,检查是否存在关系似乎很容易变得非常昂贵。

1 个答案:

答案 0 :(得分:2)

“然后,我可以有另一个Lambda函数,该函数定期运行以查找和删除任何孤儿。” <-随着时间的流逝,这可能会变得非常昂贵,尤其是如果您打算通过{ {3}}桌子。

我开发了一个基于DynamoDB的系统,该系统具有相似的关系,并且在保存数据之前先验证关系,因为我不想在表中包含垃圾数据。

要考虑的一个选项是通过身份验证和授权隐式测试有效用户的存在。如果用户通过了您的身份验证测试,那么您就知道它们存在,因此您可以放心地添加他们的帖子。