【问题标题】:Designing tables in Amazon dynamodb在 Amazon dynamodb 中设计表格
【发布时间】:2012-09-26 22:17:54
【问题描述】:

我是 DynamoDB 的新手,我有一大堆问题:我的表应该是什么样子。

我已经阅读了这里的帖子:(推荐给尚未阅读的人) http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html

现在我有一些困境,我认为每个开始使用 DynamoDB 的人都会遇到。

首先, 我的表:学生、团队、项目

学生id、年龄...

团队id、student-1-id、student-2-id、current-project、prev-project、last-updated-on

项目id、团队ID、问题列表、student1answers 列表、student2answers 列表

一些cmets:

  1. 如您所见,我不使用范围键。 我需要吗?
  2. 每个答案都是(问题数量、文本、插入日期)的 json
  3. 每个学生都可以加入多个团队。

我的困境:

  1. 我想获取在特定日期之后更新的特定学生的所有团队。

现在我使用 2 次扫描操作:一次搜索 student1,第二次搜索 student2。

       **Is there a better way ?**

我考虑过添加一个新表:user-Battles: student-id, team-id 所以我可以查询特定学生的团队,然后 batch_get_item 所有团队 但是最后一次更新呢?我如何在 batch_get_item 中也通过这个查询?

  1. 当一个项目结束时,我不再使用它。旧物品怎么办? 删除 ?将它们移到另一个表?

  2. 在项目表中,可以更新的属性是answers属性 所以我想把他们搬到另一张桌子上表演。

如果只更新了两次,我真的需要移动它们吗? (当 student1 发送答案和 student2 发送答案时 - 然后项目是旧的)

*如果我为答案创建一个新表,我将不必以 JSON 格式存储它们

你会如何设计桌子?请告诉我。

【问题讨论】:

    标签: database database-design nosql amazon-dynamodb


    【解决方案1】:

    很好的问题,有很多细节:)

    如果我只有一个建议,那就是:

    请记住,对于 NoSQL,它不仅可以而且正常,甚至建议对您的数据进行反规范化。

    这就是说,对于你“两难”,你的建议还是不错的。您应该将日期反规范化为range_key。一种方法是添加这样的表:

    • hash_key:学生
    • range_key:日期
    • team: team_id

    但是,这仍然不是完美的,因为表格会继续增长。每次更新都会插入一个新对象。实际上,无法编辑密钥。您必须自己编写清理代码。

    在 DynamoDB 中,您不必担心“旧”项(扫描除外)导致性能下降,这是 DynamoDB 的主要优势。尽管如此,这始终是保持数据清洁但保持一致的好习惯。如果您开始移动过期的项目,请移动所有个项目,否则您最终将不知道您的数据在哪里。

    最后一个建议:您确定“ids”是描述您的对象的最佳方式吗?大多数情况下,名称、日期或任何唯一属性都是更好的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多