AWS DynamoDB 中本地索引的好处?

Benefit of local index in AWS DynamoDB?

在 DynamoDB 中,我有一个 table 如下例数据

pk        sk                         name         price 
=======================================================
product   cat#phone#name#iPhone11    iPhone 11    500
product   cat#phone#name#Nokia1100   Nokia 1100   100
product   cat#phone#name#iPhone11    iPhone 11    500

在某些情况下,我必须按名称搜索。因此,首先我为 name where in index pk = pk, sk=name 创建了一个全局索引。然后我进行了搜索,效果很好。

现在我改变了决定,创建了一个 local index for name,其中 name is sk。它也工作正常。我的问题是如果我在这里使用本地索引,有什么好处吗?什么时候不应该使用本地索引?如果此处不需要全局索引,但我已经使用了,是否存在性能问题?

@niloy-rony,

这个AWS doc很好的详细解释了LSI和GSI。

现在回答你的问题
- LSI 无需额外费用。您无需为 GSI 的 RCU 付费,但 WCU 需要为存储付费,如另一个 AWS doc.
中所述 - 如果您非常确定主 table 的单个分区(即 pk)(pk 在 LSI 中保持不变)可以超过 10GB,则不应使用 LSI。这个在上面分享的link中也有讨论。
- 在查询延迟方面,LSI 和 GSI 没有性能问题。但是,GSI 中的读取是最终一致的,而 LSI 支持强一致性读取。


编辑,摘录自 AWS doc 以了解强读取和最终一致性读取。

强一致性读取 - 当您请求强一致性读取时,DynamoDB return会提供最新数据的响应,反映来自所有之前成功的写入操作。

最终一致性读取 - 当您从 DynamoDB table 读取数据时,响应可能不会反映最近完成的写入操作的结果。响应可能包含一些陈旧数据。如果您在短时间内重复读取请求,则响应应该 return 最新数据。

请参阅 this AWS 文档以获取最小化数据从主 table 到 GSI

的传播延迟的提示