首页 > 解决方案 > DynamoDB 二级索引不唯一?

问题描述

我设置了一个只有分区键(没有排序键)的二级索引,但我发现实际上我可以插入多个具有相同分区键的项目。

如果我使用二级索引中的分区键发出查询,我将获得分区键等于给定分区键值的所有项目。

我是 DynamoDB 的初学者,我想知道是否设置只有一个分区键的二级索引,但是插入多个具有相同分区键的项目是个好主意。

我正在使用 Amplify.js 并拥有这个 GraphQL 架构:

type UserMeta @model @key(fields: ["owner"]) @auth(rules: [
    { allow: owner, operations: [create, delete, update] },
    {
        allow: groups,
        groups: ["Admins"],
        operations: [update, delete]
    }
]) {
    familyName: String
    givenName: String
    facebookUrl: AWSURL
    twitterUrl: AWSURL
    description: String
    careers: [Career] @connection(keyName: "byOwner", fields: ["owner"])
    owner: String!
}

type Career @model @key(name: "byOwner", fields: ["owner"]) @auth(rules: [
    { allow: owner, operations: [create, delete, update] },
    {
        allow: groups,
        groups: ["Admins"],
        operations: [update, delete]
    }
]) {
    id: ID!
    company: String
    companyUrl: AWSURL
    industry: String
    occupation: String
    owner: String!
}

如您所见,该Career表有一个二级索引byOwner,其分区键关联owner(无排序键)。但我可以正常查询careersUserMeta

与传统的RDBMS,索引列不能相同,我不知道为什么在DynamoDB中这是可能的,这是DynamoDB中的最佳实践吗?

byOwner我应该为索引设置排序键吗?也许排序键可以是id列?

标签: amazon-dynamodbamazon-dynamodb-index

解决方案


与传统的RDBMS,索引列不能相同,我不知道为什么在DynamoDB中这是可能的,这是DynamoDB中的最佳实践吗?

我使用过的每个 RDBMS 都允许唯一和非唯一索引。

DDB 中唯一可用的唯一性是表的主键。

具有相同分区键的记录很常见。在表中,具有相同分区键的记录必须具有不同的排序键。

对于索引,允许重复,这是非常常见的用例。


推荐阅读