如何最小化 DynamoDB 多对多关系中的数据冗余?

How do I minimize data redundancy in DynamoDB many-to-many relationship?

我目前正在构建一个简单的时事通讯应用程序,用户可以在其中通过电子邮件受邀阅读时事通讯。

我有当前示例 table 设置:

我使用 1 个 GSI,它使用基础 table SK 作为 PK,使用基础 table PK 作为 SK - 这给了我以下聚合视图:

我的问题是 - 对于我的用例,"newsletter email relationship data" 和 "newsletter data" 必须相同,这样我才能在时事通讯列表中同时显示我的时事通讯预览, 在用户单击列出的新闻通讯之一并显示新闻通讯详细信息后显示新闻通讯本身。

对于任何试图像我一样理解 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 并手动修改时事通讯邀请排序键。