我设置了一个只有分区键(没有排序键)的二级索引,但我发现实际上我可以插入多个具有相同分区键的项目。
如果我使用二级索引中的分区键发出查询,我将获得分区键等于给定分区键值的所有项目。
我是 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
(无排序键)。但我可以正常查询careers
。UserMeta
与传统的RDBMS,索引列不能相同,我不知道为什么在DynamoDB中这是可能的,这是DynamoDB中的最佳实践吗?
byOwner
我应该为索引设置排序键吗?也许排序键可以是id
列?