Amazon dynamodb DynamoDB二级索引不是唯一的?
我已经设置了一个只有分区键(没有排序键)的二级索引,但是我发现实际上我可以用同一个分区键插入多个项 如果我使用二级索引中的分区键发出查询,我将获得分区键等于给定分区键值的所有项 我是DynamoDB的初学者,我想知道是否只使用分区键设置二级索引,但是使用相同的分区键插入多个项是一个好主意 我使用的是Amplify.js,并具有以下GraphQL模式:Amazon dynamodb DynamoDB二级索引不是唯一的?,amazon-dynamodb,amazon-dynamodb-index,Amazon Dynamodb,Amazon Dynamodb Index,我已经设置了一个只有分区键(没有排序键)的二级索引,但是我发现实际上我可以用同一个分区键插入多个项 如果我使用二级索引中的分区键发出查询,我将获得分区键等于给定分区键值的所有项 我是DynamoDB的初学者,我想知道是否只使用分区键设置二级索引,但是使用相同的分区键插入多个项是一个好主意 我使用的是Amplify.js,并具有以下GraphQL模式: type UserMeta @model @key(fields: ["owner"]) @auth(rules: [
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
关联的分区键(没有排序键)。但是我可以正常查询UserMeta
的careers
对于传统的RDBMS,索引列不能相同,我不知道为什么这在DynamoDB中是可能的,这是DynamoDB中的最佳实践吗
我应该为byOwner
索引设置排序键吗?排序键可能是id
列
对于传统的RDBMS,索引列不能相同,I
不知道为什么这在DynamoDB中是可能的,这是最佳实践吗
在DynamoDB中
我使用过的每个RDBMS都允许使用唯一和非唯一索引
DDB中唯一可用的唯一性是表的主键
具有相同分区键的记录非常常见。在表中,具有相同分区键的记录必须具有不同的排序键
对于索引,允许重复,这是非常常见的用例
对于传统的RDBMS,索引列不能相同,I
不知道为什么这在DynamoDB中是可能的,这是最佳实践吗
在DynamoDB中
我使用过的每个RDBMS都允许使用唯一和非唯一索引
DDB中唯一可用的唯一性是表的主键
具有相同分区键的记录非常常见。在表中,具有相同分区键的记录必须具有不同的排序键
对于索引,允许重复,同样,这是非常常见的用例。RDBMS和DynamoDB之间的一个区别是后者希望您了解数据访问模式,并使用它来通知数据应该采取什么形式。所以这个问题 我应该为byOwner索引设置排序键吗?也许排序键可以是id列 。。。只能通过了解您计划如何加载
Career
对象来回答
如果要使用一次只加载一个的GraphQL查询,如
type Query {
career(owner: String!, id: Id!)
}
。。。那么添加ID作为排序键是值得的。这意味着Career
的GraphQL解析器每次都能准确地检索到正确的对象
但是,如果您需要查询以获得Career
对象列表
type Query {
careers(owner: String!, since: dateString)
}
。。。默认情况下,您只希望检索类似“最近创建的职业”的内容,那么在创建职业时创建另一个属性跟踪会更好——比如createdAt:String代码>--并将其用作排序键。然后,解析器将按逻辑顺序接收该所有者的职业列表,允许它只读取最早(或最新)的职业
关于如何在AWS AppSync中使用GSI键和排序键。RDBMS和DynamoDB之间的一个区别是后者希望您了解数据访问模式,并使用它来通知数据应该采取何种形式。所以这个问题
我应该为byOwner索引设置排序键吗?也许排序键可以是id列
。。。只能通过了解您计划如何加载Career
对象来回答
如果要使用一次只加载一个的GraphQL查询,如
type Query {
career(owner: String!, id: Id!)
}
。。。那么添加ID作为排序键是值得的。这意味着Career
的GraphQL解析器每次都能准确地检索到正确的对象
但是,如果您需要查询以获得Career
对象列表
type Query {
careers(owner: String!, since: dateString)
}
。。。默认情况下,您只希望检索类似“最近创建的职业”的内容,那么在创建职业时创建另一个属性跟踪会更好——比如createdAt:String代码>--并将其用作排序键。然后,解析器将按逻辑顺序接收该所有者的职业列表,允许它只读取最早(或最新)的职业
关于如何在AWS AppSync中使用GSI和排序键。谢谢,非常有用的提示!!谢谢,非常有用的提示!!