DynamoDB使用主键属性的索引来改进访问.它们可以加速应用程序访问和数据检索,并通过减少应用程序延迟来支持更好的性能.
二级索引包含一个属性子集和一个备用钥匙.您可以通过查询或扫描操作来使用它,该操作以索引为目标.
其内容包括您投影或复制的属性.在创建中,您可以为索引定义备用键,以及要在索引中投影的任何属性.然后,DynamoDB将属性的副本执行到索引中,包括从表中获取的主键属性.执行这些任务后,您只需使用查询/扫描就像在表上执行一样.
DynamoDB会自动维护所有二级索引.在项目操作(例如添加或删除)上,它会更新目标表上的任何索引.
DynamoDB提供两种类型的二级索引 :
全球二级指数 : 此索引包括分区键和排序键,它可能与源表不同.它使用标签"global",因为索引上的查询/扫描能够跨越所有表数据以及所有分区.
当地二级指数 : 此索引与表共享分区键,但使用不同的排序键.它的"本地"性质来自其所有分区,其范围分为具有相同分区键值的表分区.
最佳索引类型使用取决于应用需求.考虑下表中显示的两者之间的差异 :
Quality | 全球二级索引 | 本地二级索引 |
---|---|---|
密钥架构 | 它使用简单或复合主键. | 它总是使用复合主键. |
键属性 | 索引分区键和排序键可以包含字符串,数字或二进制表属性. | 索引的分区键是与表分区键共享的属性.排序键可以是字符串,数字或二进制表属性. |
每个分区键的大小限制值 | 它们没有大小限制. | 它对索引的总大小施加了10GB的最大限制与分区键值相关联的项目. |
在线索引操作 | 您可以在创建表时生成它们,将它们添加到现有表中,或删除现有表. | 您必须在创建表时创建它们,但不能删除它们或将它们添加到现有表. |
查询 | 它允许查询覆盖整个表和每个分区. | 它们通过提供的分区键值来处理单个分区.查询. |
一致性 | 这些索引的查询只提供最终一致的选项. | 这些查询的查询提供了最终一致或强烈一致的选项. |
吞吐量成本 | 它包括读取和写入的吞吐量设置.查询/扫描消耗索引的容量,而不是表,这也适用于表写更新. | 查询/扫描消耗表读取容量.表写入更新本地索引,并使用表容量单位. |
投影 | 查询/扫描只能请求投射到索引中的属性,不会检索表属性. | 查询/扫描可以请求这些属性没有预测;此外,还会自动提取它们. |
使用二级索引创建多个表时,请按顺序执行;意思是创建一个表并等待它在创建另一个并再次等待之前达到ACTIVE状态. DynamoDB不允许并发创建.
每个二级索引都需要某些规格 :
输入 : 指定本地或全球.
名称 : 它使用与表格相同的命名规则.
Key Schema : 只允许顶级字符串,数字或二进制类型,索引类型确定其他要求.
投影属性 : DynamoDB自动对它们进行投影,并允许任何数据类型.
吞吐量 : 指定全局二级索引的读/写容量.
索引的限制仍为每个表5个全局和5个本地.
您可以使用 DescribeTable 访问有关索引的详细信息.它返回名称,大小和项目数.
注意 : 这些值每6小时更新一次.
在用于访问索引数据的查询或扫描中,提供表和索引名称,结果的所需属性以及任何条件语句. DynamoDB提供以升序或降序返回结果的选项.
注意 : 删除表也会删除所有索引.