【问题标题】:DynamoDB Many-to-Many relationsDynamoDB 多对多关系
【发布时间】: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


    【解决方案1】:

    为您的架构建模以利用项目集合将允许您使用查询 API,该 API 没有返回项目的限制,但仍需要分页的 1MB 限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多