【发布时间】:2021-07-10 18:03:23
【问题描述】:
我在 DynamoDB 中建模数据时遇到问题。我的 APP 创建笔记,可以与其他用户共享笔记并允许其他用户更新笔记(由 https://keep.google.com/ 完成)。
由于我需要在用户之间共享笔记,我决定将我的主表键作为笔记的标识符。
然后我为我的 DynamoDB 表提供以下数据模型:
-
主表:(PK = NoteId,SK = 类型)
-
辅助表:(GSK = userId, SK = noteId)
“类型”将指示它是笔记的主体(将保存有关笔记的信息)还是指示笔记是否已与其他用户共享的标识符。
一旦我有了 noteId(s) 列表,我将查询我的主表以获取用户的所有共享笔记(因为用户的笔记已经存在于 SGK 中)。
但是,为此我需要使用函数:“BatchGetItem”。
问题是它只允许获取 100 个项目和 16MB 数据。
如果共享笔记超过 100 个,我必须多次调用此函数。此外,如果数据超过 16MB,我需要实现一种机制来读取其余请求的数据。
此操作可能会变得非常慢,具体取决于数据大小和 shareId 的数量。
您可以想象使用 RDB 和“join”很容易解决这个问题。
但这里的想法是使用 DynamoDB。
数据访问模式:
- 按 userId 获取所有笔记(拥有和共享)
- 通过 userId 和 sharedId 添加一个共享。
- 通过 noteId 和 userId 获取权限。
- 按 ID 更新备注
- 按 Id 删除注释
关于如何更改我的数据模型以改进访问模式以阅读所有笔记的任何想法?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb many-to-many