问题 DynamoDB二级索引的唯一性


题:

具有作为复合散列范围键的主键的DynamoDB表是唯一的。这是否也扩展到二级指数?

例:

我有一个评论DynamoDB表 POST_ID 主键和 COMMENT_ID 范围键。 另外还有一个带有a的本地二级索引 日期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。

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


10536
2018-06-24 18:38


起源



答案:


本地二级索引(LSI)中的每个项目与表中的相应项目具有1:1的关系。在上面的示例中,虽然LSI中的条目1和条目2具有相同的范围键值,但是它们指向的表中的项目是不同的。因此,索引键(散列或散列+范围)不是唯一的。

全球二级指数(GSI)在这方面与LSI类似。每个GSI项都包含表哈希和范围键(对应项)。有关详细信息,请访问: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Projections


3
2018-06-24 20:04





二级索引不保证唯一性。来自文档:

此外,请记住全局二级索引不强制唯一性

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html


12
2018-06-24 21:29



如何保证唯一性? - justin.m.chase
@ justin.m.chase unique() 你检索它们后我猜:( - yegor256


答案:


本地二级索引(LSI)中的每个项目与表中的相应项目具有1:1的关系。在上面的示例中,虽然LSI中的条目1和条目2具有相同的范围键值,但是它们指向的表中的项目是不同的。因此,索引键(散列或散列+范围)不是唯一的。

全球二级指数(GSI)在这方面与LSI类似。每个GSI项都包含表哈希和范围键(对应项)。有关详细信息,请访问: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html#GSI.Projections


3
2018-06-24 20:04





二级索引不保证唯一性。来自文档:

此外,请记住全局二级索引不强制唯一性

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html


12
2018-06-24 21:29



如何保证唯一性? - justin.m.chase
@ justin.m.chase unique() 你检索它们后我猜:( - yegor256