DynamoDB - 索引

DynamoDB 使用主键属性索引来改进访问。 它们加速应用程序访问和数据检索,并通过减少应用程序延迟来支持更好的性能。

二级索引

二级索引保存属性子集和备用键。 您可以通过针对索引的查询或扫描操作来使用它。

其内容包括您投影或复制的属性。 在创建过程中,您可以为索引定义一个备用键,以及您希望在索引中投影的任何属性。 然后,DynamoDB 将属性复制到索引中,包括来自表的主键属性。 执行这些任务后,您只需像在表上执行一样使用查询/扫描。

DynamoDB 自动维护所有二级索引。 在项目操作(例如添加或删除)上,它会更新目标表上的所有索引。

DynamoDB 提供两种类型的二级索引 −

  • 全球二级索引 − 该索引包括分区键和排序键,它们可能与源表不同。 它使用"全局"标签是因为索引上的查询/扫描能够跨越所有表数据和所有分区。

  • 本地二级索引 − 该索引与表共享一个分区键,但使用不同的排序键。 其"本地"性质源于其所有分区范围都为具有相同分区键值的表分区。

要使用的最佳索引类型取决于应用程序的需求。 考虑下表中显示的两者之间的差异 −

品质 全球二级索引 本地二级索引
Key 键架构 它使用简单或复合主键。 它始终使用复合主键。
Key 键属性 索引分区键和排序键可以由字符串、数字或二进制表属性组成。 索引的分区键是与表分区键共享的属性。 排序键可以是字符串、数字或二进制表属性。
每个分区 Key 键值的大小限制 它们没有大小限制。 它对与分区键值关联的索引项的总大小施加了 10GB 的最大限制。
在线索引操作 您可以在创建表时生成它们、将它们添加到现有表或删除现有表。 您必须在创建表时创建它们,但不能删除它们或将它们添加到现有表中。
查询 它允许查询覆盖整个表和每个分区。 它们通过查询中提供的分区键值来寻址单个分区。
一致性 这些索引的查询仅提供最终一致的选项。 这些查询提供最终一致或强一致的选项。
吞吐量成本 它包括读取和写入的吞吐量设置。 查询/扫描消耗索引的容量,而不是表的容量,这也适用于表写入更新。 查询/扫描消耗表读取容量。 表写入更新本地索引,并消耗表容量单位。
投影 查询/扫描只能请求投影到索引中的属性,不能检索表属性。 查询/扫描可以请求那些未投影的属性; 此外,还会自动获取它们。

创建多个带有二级索引的表时,按顺序进行; 意思是创建一个表并等待它达到 ACTIVE 状态,然后再创建另一个表并再次等待。 DynamoDB 不允许并发创建。

每个二级索引都需要一定的规格 −

  • 类型 − 指定本地或全局。

  • 名称 − 它使用与表相同的命名规则。

  • 键架构 − 仅允许顶级字符串、数字或二进制类型,索引类型决定其他要求。

  • 投影属性 − DynamoDB 会自动投影它们,并允许任何数据类型。

  • 吞吐量 − 指定全局二级索引的读/写容量。

每个表的索引限制仍然是 5 个全局索引和 5 个本地索引。

您可以通过DescribeTable访问有关索引的详细信息。 它返回名称、大小和项目计数。

注意 − 这些值每 6 小时更新一次。

在用于访问索引数据的查询或扫描中,提供表和索引名称、结果所需的属性以及任何条件语句。 DynamoDB 提供了按升序或降序返回结果的选项。

注意 − 删除表也会删除所有索引。