当前位置: 首页 > 知识库问答 >
问题:

在DynamoDB表中没有排序键的全局二级索引有什么意义?

江衡
2023-03-14

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

共有3个答案

马臻
2023-03-14

通常,在对基表本身进行索引时,需要有一个排序键。但是,在创建表时,没有创建排序键,因此无法追溯创建。在这种情况下,您可以创建一个GSI(当然,您通常也会创建GSI来索引其他属性)。此外,如果您的GSI散列键与主表散列键不同,那么也不能使用排序键,您需要GSI。

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

孙成化
2023-03-14

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

尹辰沛
2023-03-14

只有一个分区键的GSI允许您使用选择为分区键的属性查询DynamoDB表。

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

  1. userId
  2. 用户名
  3. 更新在

如果您的表的主键由userId作为分区键和updatedAt作为排序键组成(这将允许您在表中查询按updatedAt日期排序的用户列表),然后,您可以添加一个GSI,其中只有用户名作为分区键,以查询同一个表中的特定用户名。

 类似资料:
  • 我仍然对本地二级索引的使用感到困惑。当需要LSI与GSI时,请给我具体的用例。 例如,“GenreAlbumTitle”索引应该是GSI还是LSI?https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html#HowItWorks.CoreComponents.Prim

  • 我正在DynamoDB中创建一个表和GSI,使用以下参数,如文档所示: 是表的主键,我使用作为GSI的主键。(为了简洁起见,我删除了一些不必要的配置参数) 我正在使用以下命令查询此表: 但我一直在犯错误: "一个或多个参数值无效:条件参数类型与模式类型不匹配" 在文档中,它指定主可以是或,并且您可以在字段中设置。我正在以的形式发送,不确定这里缺少了什么。 问题是在我创建表的方式上,还是在我查询表的

  • DynamoDB表已经创建并在生产中运行。根据当前用例,计划添加新的辅助全局索引。这可以通过AWS实现SDK,是否可以使用CloudForm脚本更新DynamoDB表。 任何帮助都将不胜感激。

  • 我是AWS DynamoDB和nosql的新手,我对表创建有问题。 我试图创建一个名为的表,具有以下属性: 用户ID(HASH) OSType(范围) MSISDN IMSI 设备ID 我不仅需要通过查询表,还需要通过以下字段查询表: MSISDN 我的逻辑如下: 通过字段查询表 在阅读了有关LSI/GSI的手册后,我很难理解如何创建表和定义这些索引。 这是我尝试使用PHP AWS SDK创建表的

  • 我有一个DynamoDB表,分区键为userID,没有排序键。该表在每个项目中还具有时间戳属性。我想检索在指定范围内具有时间戳的所有项目(无论用户ID如何,即跨所有分区)。在阅读文档并搜索堆栈溢出(此处)后,我发现需要为我的表创建一个GSI。因此,我使用以下键创建了一个GSI: 分区键: 排序键: 我正在使用Java SDK使用以下代码查询索引: 执行此代码时出现以下错误: 据我所知,我应该能够仅

  • 我有以下带有三个全局二级索引(GSI)的DyamoDB表 Id(主键)、user_id(GSI)、event_type(GSI)、product_id(GSI)、rate、create_date 我有以下三种查询模式: null null