amazon-dynamodb - DynamoDB 日历/事件类结构的推荐架构

标签 amazon-dynamodb

我对 DynamoDB 设计很陌生,并试图为我的应用程序获取正确的架构。在这个应用程序中,不同的用户将输入有关他们一天的各种属性。例如“用户 X,3 月 1 日 12:00-2:00,累了”。给定时间可能有多个条目,或重叠时间(例如,从 12 点到 2 点很累,从 12 点到 1 点吃午饭)。

我需要根据用户和时间范围进行查询。常见查询:

  • 给我时间 t1 和 t2 之间用户 X 的所有“ Action ”
  • 给我用户 X 的操作 Z 的所有开始时间

  • 我最初的想法是分区键将是开始时间的用户 ID 和范围键,但由于重复的开始时间而无法正常工作,对吗?

    第二个想法:
  • 用户 ID - 分区键
  • 开始时间 - RangeKey
  • Action - 该开始时间的所有操作的 JSON 文档

    [{ Action :“午餐”,结束时间:“1pm”},{ Action :累了,结束时间:“2pm”}]

  • 关于正确模式的任何建议?

    最佳答案

    这真的没有一个解决方案。并且您需要根据您的用例评估多个选项,您拥有多少数据/查询频率以及查询哪些字段等。

    但是一个很好的解决方案是像这样对您的架构进行分区。

  • 生成的 UUID 作为分区键
  • 用户 ID
  • 开始时间(unix 纪元时间或 ISO8601 时间格式)

  • 优势
  • 可以处理多个时区
  • 可以轻松查询 用于用户 ID 和开始日期(您将需要带有主键用户 ID 和排序键开始时间的二级索引)
  • 由于随机生成的主键,跨 dynamoDB 分区的数据分布更均匀,热键更少。

  • 缺点
  • 每个项目的更多数据(由于 UUID)(+16 字节)
  • 新二级索引的额外成本,注意扫描表中的数据通常比拥有二级索引昂贵得多。

  • 这与您最初的想法非常接近,为了获得更精确的答案,我们将需要更多关于您计划的写入和读取次数以及您将需要什么样的查询的信息。

    关于amazon-dynamodb - DynamoDB 日历/事件类结构的推荐架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724006/

    相关文章:

    amazon-web-services - 如何在 Cloudformation 模板中引用 DynamoDB 表的最新流

    java - 错误 : Could not find or load main class . library.path=

    list - 在 DynamoDB 表项目的列表类型属性中添加或删除条目

    javascript - 将 getItem 与主键和排序键一起使用

    mongodb - DynamoDB 与 MongoDB NoSQL

    javascript - 在 dynamodb 中使用 batchWriteItem

    amazon-dynamodb - 如何在 dynamoDB 上运行 DeleteItemRequest?

    java - Getter 用于在 dynamoDB 中增值

    amazon-web-services - 在 DynamoDB 中查找平均值和总和?

    python - boto dynamodb2 : Can I query a table using range key only?