DynamoDB本地二级索引与全局二级索引

时间:2019-05-22 22:02:32

标签: amazon-web-services amazon-dynamodb

我一直在阅读Amazon DynamoDB文档,以比较全局二级索引(GSI)和本地二级索引(LSI)。我仍然不清楚在以下用例中,我使用的内容对我有关系吗?我熟悉LSI之类的东西,应该使用相同的分区键等。

这是用例:

  1. 我已经知道索引的排序键。
  2. 两种情况下我的分区键都是相同的
  3. 我想将原始表中的所有属性投影到我的索引上
  4. 在创建表之前,我已经知道用例需要什么索引。

在上述用例中,除了LSI Vs GSI中的较小延迟增加之外,绝对没有区别,因为LSI可能最终以相同的碎片结尾。我想在用例中了解Pro Vs Con。

以下是我要寻找答案的一些问题,但我还没有遇到一个明确的博客:

  1. 仅由于分区键不同而使用GSI吗?
  2. 即使分区键相同,也要使用GSI,但是在创建表的过程中我不知道需要这样的索引吗?

是否还有其他主要原因,其中一个要优于另一个(除非计数限制为5 vs 20等所有基本条件)。

1 个答案:

答案 0 :(得分:0)

还有两个未提及的关键区别。您可以在official documentation中看到两种索引类型的完整比较。

  • 如果使用LSI,则每个分区键值(表加上所有LSI)最多可以有10 Gb的数据。对于某些用例,这是一个破坏交易的因素。使用LSI之前,请确保情况并非如此。
  • LSI使您可以执行高度一致的查询。这是使用LSI的唯一真正好处。

AWS general guidelines用于索引说

  

通常,您应该使用全局二级索引而不是本地二级索引。例外是当您需要查询结果具有高度一致性时,本地二级索引可以提供该一致性,而全局二级索引则不能(全局二级索引查询仅支持最终一致性)。

您可能还会发现this SO answer有用的讨论,关于为什么您应该首选GSI而不是LSI。