【发布时间】:2020-10-21 11:22:43
【问题描述】:
我想使用无服务器(AWS Lambda + DynamoDB + S3 用于托管 FE)创建一个文章应用程序。 我对“1 表方法”有一些疑问。 我要执行的操作:
- 获取按日期排序的最新 (6) 篇文章
- 按 id 获取文章
- 获取与打开的文章相关的上一篇/下一篇文章(基于创建日期)
- 按标签获取相关文章
- 按文章获取 cmets
我遇到的第一个问题是行动 nr。 1,我无法根据日期获取所有文章,我已经为文章添加了SK作为日期,但是因为PK有单独的文章,每个都有它的id:article-1,article-2..等等,我不知道如何获取只有 SK 的所有文章。
然后我尝试创建一个 LSI ,但后来我注意到 LSI 需要具有与表相同的 PK,因此我可以根据 LSI type = 'ARTICLE' 进行选择,但我仍然无法选择按日期排序的它们(entities_sort 值)
我知道 AWS 说 PK 是唯一的有好处,但是在这种情况下你如何对数据进行分组呢?
这有助于我按 type(GSI2PK)='ARTICLE' 按 entity_sort (GSI2SK) 排序的文章,但没有更好的方法来实现这一点吗?将您的文章作为 PK 放在一个表格中,但不知何故仍然能够按日期对它们进行排序?
以这种方式拥有 GSI1PK、GSI1SK - 我可以使用反向查找获得一篇文章的所有 cmets,这很好。
但我仍然不知道如何实现数字3。获取相对于打开的文章的上一篇/下一篇文章(基于创建日期):通过id获取文章,检查其创建日期(entities_sort),然后根据该创建日期(entities_sort)以某种方式获取之前和之后的下一篇文章,DynamoDB 中是否有可以为我执行此操作的函数?
在我的方法中,我尝试查询/处理尽可能少的项目,因此我不想使用过滤功能,而是对我的信息进行分区。
我的问题是,我应该如何实现 1 和 3?为这么少的操作创建 2 个 GSI 是不是有点矫枉过正?
在 PK 上有文章的模式是什么,具有唯一的 ID,但仍然能够按创建日期对它们进行排序?
谢谢
【问题讨论】:
标签: amazon-web-services amazon-dynamodb serverless serverless-architecture