基于单表的NoSQL数据库设计

基于单表的NoSQL数据库设计,nosql,amazon-dynamodb,partitioning,Nosql,Amazon Dynamodb,Partitioning,您对“在DynamoDB应用程序中应该维护尽可能少的表”这句话的满意度如何。大多数设计良好的应用程序只需要一个表。 我已经列出了我的NoSQL设计用例,但将自己限制在一个表的设计中会使设计变得复杂,并且要求每个使用NoSQL表的开发人员理解逻辑复杂性,遵守分区和性能增益的原则。只需编写几个我的应用程序,即可执行以下操作: 向移动设备注册用户帐户 允许多个用户在安装了应用程序的任何移动设备上检查其帐户 记录每个用户每天可能从10到1000的用户活动 有一个批处理作业,它定期检查任何用户帐户是否得到

您对“在DynamoDB应用程序中应该维护尽可能少的表”这句话的满意度如何。大多数设计良好的应用程序只需要一个表。

我已经列出了我的NoSQL设计用例,但将自己限制在一个表的设计中会使设计变得复杂,并且要求每个使用NoSQL表的开发人员理解逻辑复杂性,遵守分区和性能增益的原则。只需编写几个我的应用程序,即可执行以下操作:

  • 向移动设备注册用户帐户
  • 允许多个用户在安装了应用程序的任何移动设备上检查其帐户
  • 记录每个用户每天可能从10到1000的用户活动
  • 有一个批处理作业,它定期检查任何用户帐户是否得到更新,然后在用户登录的所有设备上发送通知(作为最后一个登录的用户)
  • 当然,这些FCM通知基于用户对通知的偏好
  • 最后,用户帐户围绕一个唯一的电子邮件地址进行链接,用户可以从任何设备更新其帐户的所有其他属性
  • 我发现批处理作业定期扫描整个表,迫使我创建第二个表,以便生成尽可能多的线程来处理行


    我怎样才能把这些都放在一张桌子上?

    所以这都是里克·霍利汉的错。他是AWS的首席工程师,专注于DynamoDB

    因此,大多数良好的设计应用程序只需要一个表,但缺少的是关于如何构造有效表的设计指南

    对于示例中的单表设计,您希望每个设备有一个分区,每个用户有一个分区,您可以为每个设备或每个用户编写相关信息。你可以在你的一张桌子上混合搭配这些东西。您可以使用全局二级索引来检索相关数据,但索引设计将取决于您的访问模式

    从本质上讲,为单表设计建模数据的方式与RDBMS完全不同,因此您需要将所知道的一切抛到脑后,重新学习

    我建议你阅读这些博客文章

    多次观看Rick关于它的重塑课程。。。通常到第十次灯泡开始熄灭时

    Rick的DynamoDB高级设计模式讲座-

    它有相当多的深度。祝你好运