Dynamodb - 如何选择合适的 GSI 和 LSI

Posted

技术标签:

【中文标题】Dynamodb - 如何选择合适的 GSI 和 LSI【英文标题】:Dynamodb - how to pick appropriate GSI and LSI 【发布时间】:2021-02-26 15:11:54 【问题描述】:

我的“横幅”表中有 5 列。

id(string) | createdAt(Date) | caption(string) | isActive(binary) | order(Int)

目前,id 是分区键和主键。

将来,我可能想做一些事情,比如使用 isActive =1 获取所有横幅并按顺序排序。

据我了解,GSI 是分区键的另一种选择,LSI 就像表中分区键不变的第二个排序键。

isActive 应该是 GSI,order 应该是 LSI 吗?

【问题讨论】:

类似主题 here 和 here。你见过那些吗? sparse indices 在这样的场景中也很有用。 是的。但我仍然不确定 isActive 是否应该是 GSI 和 order 是否应该是 LSI 【参考方案1】:

这是我关于 LSI 的经验法则:仅在您使用它时使用它

    二级索引需要强读取一致性 想要保存二级索引的 Provisioned RCU 和 WCU

否则,请毫不犹豫地使用 GSI。

【讨论】:

为什么 LSI 比 GSI 保存的二级索引的 Provisioned RCU 和 WCU 更多?我知道 GSI 会导致创建另一个具有不同分区键的表。所以 LSI 不会做同样的事情? 另外,在我上面的用例中。你认为 isActive/order 应该设置成什么? @CCCC 因为 LSI 共享主表的 RCU 和 WCU。 docs.aws.amazon.com/amazondynamodb/latest/developerguide/… 我一般会推荐 GSI。 所以你的意思是 isActive 应该是分区键,而 order 应该是 GSI 的排序键?

以上是关于Dynamodb - 如何选择合适的 GSI 和 LSI的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB GSI - 仅包含一些行

通过 updateTable 创建多个 GSI - DynamoDB

使用 Amplify 库的基于 DynamoDB GSI 的查询

Dynamodb 我可以用两个 GSI 查询吗?

无法使用 CloudFormation 将 GSI 添加到 DynamoDB 表

我们可以通过 AWS SDK 使用 GSI 删除 DynamoDB 中的项目吗?