1

查询模式:

获取upvotes > downvotes



Schema的所有帖子

Post = new Schema({
  id: {
    type: String,
    hashKey: true
  },
  upvote: {
    type: Number,
  },
  downvote: {
    type: Number,
  }
});





如何实现这种查询模式?

4

1 回答 1

2

DynamoDB 根据分区键 (PK) 拆分所有数据,即您的数据被分成多个服务器进行存储。
因此,要检索数据,您至少需要传递分区键。

我相信你的用例是get all posts where upvotes > downvotes

由于这是一个全局查询,并且与 dynamodb 表中的任何分区或特定条目无关,因此您需要使用二级索引(通过 GSI 的稀疏索引)。

为了实现这一点,您可以创建一个名为的附加属性upvotes_gt_downvotes,并且仅当赞成票大于反对票时才存储此属性(或存储差异以在更多查询中使用它)。此外,您需要将此新属性 (upvotes_gt_downvotes) 与时间戳一起设置为 GSI 表的排序键 (SK)。

要获得结果,您必须扫描此 GSI。请注意,此 GSI 将仅包含满足您查询的记录,并且会在从记录中删除属性后立即从 GSI 中删除。
在投票时,如果此值变为 0 或 -ve,您将不得不在更新记录时删除此属性。(删除此属性会自动从 GSI 中删除记录)

于 2020-07-28T13:00:32.777 回答