Amazon DynamoDB
开发人员指南 (API 版本 2012-08-10)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

利用稀疏索引

对于表中的任何项目,DynamoDB 仅当项目中存在索引排序键值时才会写入相应的索引条目。如果排序键并未出现在每个表项目中,则这种索引称为稀疏 索引。

稀疏索引对于查询表的小型子部分非常有用。例如,假设您有一个存储您的所有客户订单的表,该表具有以下键属性:

  • 分区键:CustomerId

  • 排序键: OrderId

要跟踪未结订单,您可以在尚未发运的订单项目中插入一个名为 isOpen 的布尔值。然后,在该订单发运后,您可以删除该属性。然后,如果对 CustomerId (分区键) 和 isOpen (排序键) 创建索引,则只有定义为 isOpen 的订单才显示在其中。如果您有数以千计的订单,其中只有少量订单处于未结状态,则查询未结订单的索引要比扫描整个表更快速且更便宜。

您可以使用具有在索引中生成有用的排序顺序的值的属性,而不是使用布尔类型的属性,如 isOpen。例如,您可以使用 OrderOpenDate 属性设置为下每个订单的日期,然后在订单完成后将其删除。这样,在查询稀疏索引时,会返回按下每个订单的日期排序的项目。

DynamoDB 中稀疏索引的示例

全局二级索引在默认情况下属于稀疏型。当您创建全局二级索引时,请指定一个分区键且可选择指定一个排序键。只有父表中包含这些属性的项目都会显示在索引中。

通过设计属于稀疏的全局二级索引,您可以为其配置比父表更低的写入吞吐量,同时仍能实现出色的性能。

例如,可跟踪每个用户的所有得分但通常只需查询一些较高得分的游戏应用程序。以下设计可高效地处理这种情况:

稀疏 GSI 示例。

在这里,Rick 玩了三款游戏并且在其中一款游戏中实现了 Champ 状态。Padma 玩了四款游戏并且在其中两款游戏中实现了 Champ 状态。请注意,Award 属性仅存在于用户获得了奖励的项目中。这些关联的全局二级索引如下所示:

稀疏 GSI 示例。

全局二级索引仅包含经常查询的高分,这是父表中的一小部分项目。

本页内容: