如何最小化 DynamoDB 多对多关系中的数据冗余?
How do I minimize data redundancy in DynamoDB many-to-many relationship?
我目前正在构建一个简单的时事通讯应用程序,用户可以在其中通过电子邮件受邀阅读时事通讯。
我有当前示例 table 设置:
- 我使用自动生成的 ID 和电子邮件作为分区键,使用通用关键字作为排序键,
- 为了定义时事通讯-电子邮件关系,我将时事通讯 ID 用作 PK,将电子邮件用作 SK
我使用 1 个 GSI,它使用基础 table SK 作为 PK,使用基础 table PK 作为 SK - 这给了我以下聚合视图:
- 我想要的访问模式是允许受邀用户使用简单的 nextToken AWS 映射模板解析器分页列出他们的时事通讯。
我的问题是 - 对于我的用例,"newsletter email relationship data" 和 "newsletter data" 必须相同,这样我才能在时事通讯列表中同时显示我的时事通讯预览, 在用户单击列出的新闻通讯之一并显示新闻通讯详细信息后显示新闻通讯本身。
- 有没有办法在没有冗余的情况下实现这一点?
- 如果没有,我如何使数百个时事通讯电子邮件关系数据与时事通讯数据保持同步?每次更新时事通讯的名称时,我真的需要通过 TransactionPutItem 执行数百个 PutItem 操作吗?
- 我是否缺少某些方法?
对于任何试图像我一样理解 dynamoDB 和 appsync 的人。您不需要像我在本示例中那样冗余地保存大部分数据。实际上,您可以定义新闻通讯和新闻通讯应用程序之间的关系,并直接从邀请中获取新闻通讯数据,如下例所示:
type Newsletter {
id: Int!
name: String!
description: String!
}
type NewsletterInvitation {
id: Int!
email: String!
newsletter: Newsletter!
}
这应该能为遇到此问题的大多数人提供答案 post。
对于与 SK 修改有关的任何用例,它变得更加困难。您将需要使用 dynamodb 数据流、SQS 前端和可能的自定义 lambda 触发器来监听您的特定项目更改、创建 SQS 事件或触发 lambda 并手动修改时事通讯邀请排序键。
我目前正在构建一个简单的时事通讯应用程序,用户可以在其中通过电子邮件受邀阅读时事通讯。
我有当前示例 table 设置:
- 我使用自动生成的 ID 和电子邮件作为分区键,使用通用关键字作为排序键,
- 为了定义时事通讯-电子邮件关系,我将时事通讯 ID 用作 PK,将电子邮件用作 SK
我使用 1 个 GSI,它使用基础 table SK 作为 PK,使用基础 table PK 作为 SK - 这给了我以下聚合视图:
- 我想要的访问模式是允许受邀用户使用简单的 nextToken AWS 映射模板解析器分页列出他们的时事通讯。
我的问题是 - 对于我的用例,"newsletter email relationship data" 和 "newsletter data" 必须相同,这样我才能在时事通讯列表中同时显示我的时事通讯预览, 在用户单击列出的新闻通讯之一并显示新闻通讯详细信息后显示新闻通讯本身。
- 有没有办法在没有冗余的情况下实现这一点?
- 如果没有,我如何使数百个时事通讯电子邮件关系数据与时事通讯数据保持同步?每次更新时事通讯的名称时,我真的需要通过 TransactionPutItem 执行数百个 PutItem 操作吗?
- 我是否缺少某些方法?
对于任何试图像我一样理解 dynamoDB 和 appsync 的人。您不需要像我在本示例中那样冗余地保存大部分数据。实际上,您可以定义新闻通讯和新闻通讯应用程序之间的关系,并直接从邀请中获取新闻通讯数据,如下例所示:
type Newsletter {
id: Int!
name: String!
description: String!
}
type NewsletterInvitation {
id: Int!
email: String!
newsletter: Newsletter!
}
这应该能为遇到此问题的大多数人提供答案 post。
对于与 SK 修改有关的任何用例,它变得更加困难。您将需要使用 dynamodb 数据流、SQS 前端和可能的自定义 lambda 触发器来监听您的特定项目更改、创建 SQS 事件或触发 lambda 并手动修改时事通讯邀请排序键。