Dynamo 中的每个项目都必须有一个唯一的主键。主键是基表索引。主键必须有一个分区键,并且可以选择有一个范围键(也称为排序键)。在分区内,项目按范围键排序。使用分区键访问项目很快。
辅助索引允许您使用备用键查询表。 本地二级索引 (LSI) 与主键(索引)具有相同的分区键,但范围键不同。考虑 LSI 的方式是,它与主索引(键)相同的数据,只是按不同的属性排序。
全局二级索引 (GSI) 的分区键与主键不同,因此是一组不同的数据。
LSI 和 GSI 之间的一个重要区别是 LSI 从基表获取其吞吐能力,因为您需要单独购买 GSI 吞吐能力。换句话说,LSI 不会花费您任何费用,而 GSI 会比您的基表产生额外费用。
让我们看一下 Music 表示例。假设基表具有此架构;
Artist: (Primary Key) Partition Key
SongTitle: (Primary Key) Range Key
AlbumTitle:
DateOfRelease:
此表是歌曲列表。我可以非常有效地访问艺术家的所有歌曲(即艺术家使用分区键查询)。当我执行此查询时,歌曲将按 SongTitle 排序。我还可以使用唯一的主键非常有效地访问 Artist 和 SongTitle 的歌曲。
现在假设我想获取艺术家的所有歌曲,但按 DateOfRelease 排序。在当前模式中,我需要获取所有歌曲,然后在我的应用程序中对它们进行排序。一个好的替代方法是创建一个新索引,其分区键为 Artist,范围键 DateOfRelease。这将是一个 LSI,因为索引 (Artist) 的分区键与主键的分区键相同。我不需要购买额外的吞吐容量,因为该索引会根据基表容量自行配置。
现在假设我想按 AlbumTitle 访问歌曲,按 SongTitle 排序,即创建专辑列表。为了有效地做到这一点,我使用分区键 AlbumTitle 和范围键 SongTitle 创建了一个新索引。这是一个 GSI,因为分区键与主键不同。此 GSI 必须单独提供给基表,因此需要额外付费。
在回答您的问题时,GenreAlbumTitle 是一个 GSI,因为它的分区键与 Music 不同。