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
的传播延迟的提示
在 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
的传播延迟的提示