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

DynamoDB二级索引的唯一性

方嘉志
2023-03-14

问题:

主键为复合哈希范围键的DynamoDB表是唯一的。这是否也延伸到二级指数?

示例:

我有一个带有post_id主键和comment_id范围键的comments DynamoDB表。此外,还有一个带有date-user_id范围键的本地辅助索引。

每个条目都是用户在发布时留下的评论。二级索引的目的是统计在特定的一天,有多少唯一的用户在一个帖子上留下了评论。

条目1:post_id:1 comment_id:1 date-user_id:2014_06_24-1

条目2:post_id:1 comment_id:2 date-user_id:2014_06_24-1

条目3:post_id:1 comment_id:3 date-user_id:2014_06_24-2

当我执行一个指定辅助索引的查询,并传入一个post_id等于1的条件和一个date-user_id等于2014_06_24-1的条件时,我得到一个2的计数,我期望一个1的计数。

为什么辅助索引有两个具有相同主键/范围键的条目。

共有1个答案

堵鸿光
2023-03-14

局部辅助索引(LSI)中的每个项都与表中的相应项具有1:1的关系。在上面的示例中,虽然LSI中的条目1和条目2具有相同的范围键值,但它们所指向的表中的项不同。因此索引键(哈希或哈希+范围)不是唯一的。

全球二级指数(GSI)在这方面与LSI相似。每个GSI项都包含(相应项的)表哈希键和范围键。详情请访问http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/gsi.html#gsi.projections

 类似资料:
  • 我希望使用DynamoDB表来请求我在查询中创建的二级索引。 从现在开始,对于我正在做的一个二级索引: 我会像这样构建我的KeyConditionExpression: 我读了一遍又一遍这份文件,但我不知道怎么做: https://docs.aws.amazon.com/fr_fr/amazondynamodb/latest/gettingstartedguide/GettingStarted.P

  • 我的主键是一个名为“ID”的字段 我在表中的字段“group_number”上添加了一个辅助索引 我通过二级索引进行查询,如下所示: 然而;我得到错误“ValidationException:query condition missed key schema Element:ID” DynamoDB只允许查询主键吗?我的印象是您使用“getitem”作为主键,因为如果您使用一个主键,只有一个记录可

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

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

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

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