可以说我有一个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...
}
我的问题是,在使用user
将post
添加到表中之前,我应该先验证dynamodb.get({PK: userId, SK: userId)
是否存在吗?这样可以确保不会有任何孤立的posts
,但是该函数将需要一个读写单元。
我的一个想法是只写post
,可能允许孤立的posts
。然后,我可以使用另一个Lambda函数,该函数会定期运行以查找和删除任何孤儿。
这显然是一个简单的情况,但请想象一个对象具有多个关系的更复杂的系统。在这些情况下,检查是否存在关系似乎很容易变得非常昂贵。
答案 0 :(得分:2)
“然后,我可以有另一个Lambda函数,该函数定期运行以查找和删除任何孤儿。” <-随着时间的流逝,这可能会变得非常昂贵,尤其是如果您打算通过{ {3}}桌子。
我开发了一个基于DynamoDB的系统,该系统具有相似的关系,并且在保存数据之前先验证关系,因为我不想在表中包含垃圾数据。
要考虑的一个选项是通过身份验证和授权隐式测试有效用户的存在。如果用户通过了您的身份验证测试,那么您就知道它们存在,因此您可以放心地添加他们的帖子。