使用单个表的NoSQL数据库设计

时间:2018-07-26 13:28:15

标签: nosql amazon-dynamodb partitioning

您对“ 您应该在DynamoDB应用程序中维护尽可能少的表。大多数设计良好的应用程序只需要一个表。 ”的说法感到满意吗? / p>

我已经列出了用于NoSQL设计的用例,但是将自己局限于单个表的设计会使设计变得复杂,并且要求每个使用NoSQL表的开发人员都必须理解遵守分区和性能提升原则的逻辑复杂性。只是写一些我的应用程序要做的事情:

  1. 在移动设备上注册用户帐户。
  2. 允许多个用户在安装了应用程序的任何移动设备上检查其帐户。
  3. 记录用户活动,每位用户一天可能发生10到1000次活动。
  4. 有一个批处理作业,该作业会定期检查是否有任何用户帐户获得更新,然后在用户已登录的所有 设备上发送通知 (作为设备上最后登录的用户)。
  5. 这些FCM通知当然基于用户的通知首选项。
  6. 最后,用户帐户围绕唯一的电子邮件地址,用户可以从任何设备更新其帐户的所有其他属性。

我找到了批处理作业,该作业会定期扫描整个表,迫使我创建第二个表,以便可以产生尽可能多的线程来处理行。

如何使所有这些都适合一张桌子?

1 个答案:

答案 0 :(得分:0)

这全是里克·胡里汉(Rick Houlihan)的错。他是AWS的首席工程师,专注于DynamoDB。

因此,开篇声明大多数设计良好的应用程序只需要一张桌子,但是缺少有关如何构造表格以使其有效的设计指南。

对于示例中的单表设计,您需要每个设备一个分区和每个用户一个分区,您还要为每个设备或每个用户写入相关信息。您可以在单个表中混合并匹配所有这些内容。您将使用全局二级索引来检索相关数据,但是该索引设计将取决于您的访问模式。

本质上,为单个表设计建模数据的方式与RDBMS完全不同,因此您需要将所有已知的知识抛诸脑后再重新学习。

我建议阅读这些博客文章

并多次观看Rick的reInvent会话...通常大约是灯泡开始熄灭的第10次...

Rick的DynamoDB高级设计模式讲座-https://www.youtube.com/watch?v=6yqfmXiZTlM

有很多深度。祝你好运!