Mysql 用户/朋友表中DynamoDB的最佳建模技巧

Mysql 用户/朋友表中DynamoDB的最佳建模技巧,mysql,amazon-dynamodb,nosql,Mysql,Amazon Dynamodb,Nosql,在mysql中,用户和朋友表有点像这样 用户表 身份证 名字 电话 状态[已启用/已禁用] =============================================== 朋友桌 用户id 另一个用户id 状态[是否为朋友] =============================================== 但是在DynamoDb中 我也一直为这两种方式感到困扰 方法1 用户表 身份证 名字 电话 朋友->属性 或 方法2 用户表 身份证 名字 电话

在mysql中,用户和朋友表有点像这样

  • 用户表
  • 身份证
  • 名字
  • 电话
  • 状态[已启用/已禁用]
===============================================

  • 朋友桌
  • 用户id
  • 另一个用户id
  • 状态[是否为朋友]
===============================================

但是在DynamoDb中

我也一直为这两种方式感到困扰

方法1

  • 用户表
  • 身份证
  • 名字
  • 电话
  • 朋友->属性

方法2

  • 用户表
  • 身份证
  • 名字
  • 电话
===============================================

  • 朋友桌
  • 用户id
  • 另一个用户ID
===============================================

我目前正在使用的方法2。问题是,以经济高效的方式、延迟和性能为表建模的最佳方法是什么

PS:我通过电子邮件向他们发送了关于这些问题的支持,但仍然没有得到他们的回复 所以应该有人已经经历了这些问题

我希望我仔细地重复了这个问题,以便理解

编辑: @陈

问:
您经常查询用户的好友列表吗?

答:是的,我会查询每个使用我的软件的用户朋友列表 当用户登录时

问:
你想快速知道一个用户有多少朋友吗?

答:不,没必要,只要我能知道用户朋友是谁,那就好了

问:
你认为一个用户会有多少朋友?

A:无限量

问:
系统将有多少用户?

A:也是无限的

谢谢你抽出时间


谢谢

David,您遇到了一个典型的NoSQL问题

在设计关系数据库时,您可以根据数据的实际情况对其进行建模,并尝试将数据拆分为表

在DynamoDB(和其他NoSQL)中,真正的模型是从需要回答的问题中派生出来的

您经常查询用户的好友列表吗? 你想快速知道一个用户有多少朋友吗? 你认为一个用户会有多少朋友? 系统将有多少用户

这些问题将帮助您在方法1和方法2之间做出选择。 如果您对这些问题的答案进行评论,我将能够向您介绍我对该模型的看法


无论如何,如果您真的想删除SQL,您可能需要查看。

如果必须使用DynamoDB,那么只需将引用保留在同一个表中(方法1)。您是否已经决定使用哪个数据库?有两个原因: 其他一些NoSQL数据库有一个充满活力的社区和优秀的文档


GraphDB似乎最适合您上面的问题,但您更清楚您的系统的整体情况。

是的,我一直在考虑(方法1),我已习惯于使用Dynamodb。谢谢,我会记住的嗨,大卫,我也被你面临的问题困扰着。我的问题是,既然您似乎使用了方法一,您是如何处理此属性的更新的?由于需要更新两个项目(对于user1和user2),因此如果出现崩溃并且只有一个用户的friends属性得到更新,而其他属性没有得到更新,您如何处理事务部分以避免出现问题?