我们说我已经在桌面上有分区键,并且我添加了一个全局二级索引。没有排序键创建这个GSI有什么意义?我读到的关于GSI的内容越多,AWS似乎就会强调GSI在指定您自己的分区密钥和排序密钥方面的灵活性。我不太确定在没有指定排序键的情况下添加GSI的使用。
答案 0 :(得分:6)
只有分区密钥的GSI允许您使用您选择作为分区密钥的属性查询DynamoDB表。
例如,如果您有一个包含三个属性的表:
userId
username
updatedAt
如果您论坛的主要密钥包含让我们说userId
作为分区键,updatedAt
作为分类键(这将允许您查询表格按updatedAt date排序的用户列表,然后您可以添加仅使用username
作为分区键的GSI来查询特定用户名的相同表。
答案 1 :(得分:2)
GSI使您能够使用索引键 - 使您能够在桌面上非常快速地访问密钥O(n)。
答案 2 :(得分:0)
通常,当您对基表本身建立索引时,您会希望有一个排序键。但是在创建表的时候,排序键并没有创建,那么就不能回溯创建了。在这种情况下,您可以创建 GSI(当然,您通常也会创建 GSI 来为其他属性建立索引)。此外,如果您的 GSI 哈希键与主表哈希键不同,那么排序键也不起作用,您需要一个 GSI。
GSI 存储在另一个表中(由 DDB 自己管理,不向用户显示)。该表包含创建 GSI 时的所有投影属性。每当主表中的记录更新时,GSI 表也会更新相同(尽管有一点延迟,因为它不是导致最终一致性的事务)。因此,如果您在更新记录后立即查询 GSI,有时可能会出现旧的/过时的数据。