二级索引
二级索引
全局二级索引 - Amazon DynamoDB http://docs.amazonaws.cn/amazondynamodb/latest/developerguide/GSI.html
一些应用程序可能需要使用很多不同的属性作为查询条件,来执行许多类型的查询。要支持这些要求,您可以创建一个或多个全局二级索引,针对这些索引发出Query
请求。为进行说明,考虑使用一个名为 GameScores 的表跟踪一个移动游戏应用程序的用户和分数。GameScores 中的每个项目都通过分区键 (UserId) 和排序键 (GameTitle) 进行标识。下表显示了此表中项目的组织方式,(并未显示所有属性)
现在假设您要编写一个领先排名表应用程序以显示每个游戏的最高分数。指定了键属性(UserId 和 GameTitle)的查询十分高效;不过,如果应用程序需要仅基于GameTitle 从 GameScores 检索数据,则需要使用 Scan
操作。随着更多项目添加到表中,所有数据的扫描会变得缓慢且低效,从而难以回答以下问题:
-
对游戏 Meteor Blasters 记录的最高分数是多少?
-
哪个用户拥有 Galaxy Invaders 的最高分数?
-
最高赢输比是多少?
要加快对非键属性的查询,您可以创建一个 全局二级索引。全局二级索引包含从基表中选择的一组属性,但是这些属性按与表主键不同的主键进行排列。索引键无需具有表中的任何键属性;它甚至无需具有与表相同的键架构。
例如,您可以创建名为 GameTitleIndex 的全局二级索引,其分区键为 GameTitle,排序键为 TopScore。基表的主键属性始终投影到某个索引,因此 UserId 属性也存在。GameTitleIndex 索引如下图所示:
现在,您可以查询 GameTitleIndex 并方便地获取 Meteor Blasters 的分数。结果按排序键值 TopScore 进行排序。如果您将 ScanIndexForward
参数设置为 false,则结果按降序返回,因此最高分数最先返回。
每个全局二级索引都必须有分区键,另外可以有可选的排序键。索引键架构可以与基表架构不同;您可以使用具有简单主键 (分区键) 的表,并创建具有复合主键(分