amazon-dynamodb - 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
(无排序键)。但我可以正常查询careers
。UserMeta
与传统的RDBMS,索引列不能相同,我不知道为什么在DynamoDB中这是可能的,这是DynamoDB中的最佳实践吗?
byOwner
我应该为索引设置排序键吗?也许排序键可以是id
列?
解决方案
与传统的RDBMS,索引列不能相同,我不知道为什么在DynamoDB中这是可能的,这是DynamoDB中的最佳实践吗?
我使用过的每个 RDBMS 都允许唯一和非唯一索引。
DDB 中唯一可用的唯一性是表的主键。
具有相同分区键的记录很常见。在表中,具有相同分区键的记录必须具有不同的排序键。
对于索引,允许重复,这是非常常见的用例。
推荐阅读
- sass - 有没有办法在 SASS/SCSS 的 @function 中使用 @mixin?
- rust - Gtk4:如何在 GtkBuilder ui 文件中指定 GtkGrid 对象的行和列
- turtle-graphics - Streamlit 在多次运行海龟绘图时崩溃
- node.js - node-fetch 使用 get 方法获取特定文件内容
- html - CSS悬停动画做曲线
- javascript - 用钩子构建一个 React 时钟
- reactjs - Redux 商店更新不会导致重新渲染
- python - 如何绑定代理,检查它是否有效并确定它在 Selenium (Chrome) 中的位置?
- complexity-theory - 指数预计算是否与多项式时间缩减相矛盾?
- mysql - 是否可以创建一个 MYSQL 视图,其中可以根据条件从表中的两个不同字段填充单个字段?