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的主要内容,如果未能解决你的问题,请参考以下文章
通过 updateTable 创建多个 GSI - DynamoDB
使用 Amplify 库的基于 DynamoDB GSI 的查询