Amazon web services 什么';在DynamoDB表中有一个没有排序键的全局二级索引有什么意义?

Amazon web services 什么';在DynamoDB表中有一个没有排序键的全局二级索引有什么意义?,amazon-web-services,amazon-dynamodb,nosql,Amazon Web Services,Amazon Dynamodb,Nosql,假设我已经在一个表上有了分区键,并且我正在添加一个全局二级索引。在没有排序键的情况下创建此GSI有什么意义?我对GSI了解得越多,AWS似乎就强调GSI在指定自己的分区键和排序键方面的灵活性。我不太确定在不指定排序键的情况下添加GSI的用法。GSI提供了使用索引键的能力-使您能够非常快速地访问表上的键O(n)。GSI仅具有分区键,允许您使用选择作为分区键的属性查询DynamoDB表 例如,如果您有一个具有三个属性的表: userId 用户名 updatedAt 如果表的主键包括作为分区键的use

假设我已经在一个表上有了分区键,并且我正在添加一个全局二级索引。在没有排序键的情况下创建此GSI有什么意义?我对GSI了解得越多,AWS似乎就强调GSI在指定自己的分区键和排序键方面的灵活性。我不太确定在不指定排序键的情况下添加GSI的用法。

GSI提供了使用索引键的能力-使您能够非常快速地访问表上的键O(n)。

GSI仅具有分区键,允许您使用选择作为分区键的属性查询DynamoDB表

例如,如果您有一个具有三个属性的表:

  • userId
  • 用户名
  • updatedAt

  • 如果表的主键包括作为分区键的
    userId
    和作为排序键的
    updatedAt
    (这将允许您查询表中按updatedAt日期排序的用户列表),然后,您可以添加一个仅使用
    用户名作为分区键的GSI,以查询同一个表中的特定用户名。

    通常,在对基本表本身进行索引时,您希望有一个排序键。但是,在创建表时,未创建排序键,因此您无法追溯创建它。在这种情况下,您可以创建一个GSI(当然,您通常也会创建GSI来索引其他属性)。另外,若您的GSI哈希键和主表哈希键不同,那个么排序键也不能工作,您需要一个GSI


    GSI存储在另一个表中(由DDB本身管理,不向用户显示)。创建GSI时,该表包含所有投影属性。每当主表中的记录更新时,GSI表也会更新相同的记录(尽管有一个小的延迟,因为它不是导致最终一致性的事务)。因此,如果您在更新记录后立即查询GSI,有时可能会得到旧数据。

    谢谢您的回复。在读了你的评论之后,我做了更多的研究,现在一切都有了意义。谢谢