我对 DynamoDB 很陌生,正在尝试解决问题。我正在设计一个包含多个实体的表(实体和属性不是真实的,但我希望它们能让您了解问题):
- 邮政
- 评论
目标是在此表中存储要发布的帖子和 N 个最新评论。
假设 Post 实体具有属性:Title, Author, Text。PK:POST#<ID>和SK #POST#<ID>:。对于评论,我对作者、评论文本和提交日期感兴趣。所以属性是:Author, Text, SubmittedAt. PK:POST#<ID>和SK #COMMENT#<COMMENT_ID>:。我的物品看起来像这样:
{"PK": "POST#1", "SK": "#POST#1", "Title": "Some", "Author": "john@doe.com", "Text": "Post text 1"}
{"PK": "POST#1", "SK": "#COMMENT#1", "Author": "author1@comment.post" "Text": "Some text1", "SubmittedAt": "2020-09-01T22:43:00+00:00"}
{"PK": "POST#1", "SK": "#COMMENT#2", "Author": "author1@comment.post" "Text": "Some text2", "SubmittedAt": "2020-09-02T22:43:00+00:00"}
{"PK": "POST#1", "SK": "#COMMENT#3", "Author": "author2@comment.post" "Text": "Some text3", "SubmittedAt": "2020-09-03T22:43:00+00:00"}
正如您所想象的那样,帖子可能很热门并且经常被评论。我正在尝试尽可能快且尽可能便宜地更新此表。我需要在表格中存储每个帖子最多 5 条评论。
到目前为止,我有两个想法:
- Read before write:阅读评论,比较 SubmittedAt,获取最旧的,将其推出并写入新项目 --> 减慢“提交评论”操作(API 调用)
- 编写,使用 DynamoDB Stream + Lambda 进行后处理,这无论如何都需要阅读整个内容 --> 引入了另一段代码来维护以及流和 lambda 的成本。
实现这一目标的其他方法是什么?会推荐哪一个?
先感谢您!