Mysql 用户/朋友表中DynamoDB的最佳建模技巧
在mysql中,用户和朋友表有点像这样Mysql 用户/朋友表中DynamoDB的最佳建模技巧,mysql,amazon-dynamodb,nosql,Mysql,Amazon Dynamodb,Nosql,在mysql中,用户和朋友表有点像这样 用户表 身份证 名字 电话 状态[已启用/已禁用] =============================================== 朋友桌 用户id 另一个用户id 状态[是否为朋友] =============================================== 但是在DynamoDb中 我也一直为这两种方式感到困扰 方法1 用户表 身份证 名字 电话 朋友->属性 或 方法2 用户表 身份证 名字 电话
- 用户表
- 身份证
- 名字
- 电话
- 状态[已启用/已禁用]
- 朋友桌
- 用户id
- 另一个用户id
- 状态[是否为朋友]
- 用户表
- 身份证
- 名字
- 电话
- 朋友->属性
- 用户表
- 身份证
- 名字
- 电话
- 朋友桌
- 用户id
- 另一个用户ID
您经常查询用户的好友列表吗?
答:是的,我会查询每个使用我的软件的用户朋友列表
当用户登录时
问:你想快速知道一个用户有多少朋友吗?
答:不,没必要,只要我能知道用户朋友是谁,那就好了
问:你认为一个用户会有多少朋友?
A:无限量
问:系统将有多少用户?
A:也是无限的
谢谢你抽出时间
谢谢David,您遇到了一个典型的NoSQL问题 在设计关系数据库时,您可以根据数据的实际情况对其进行建模,并尝试将数据拆分为表 在DynamoDB(和其他NoSQL)中,真正的模型是从需要回答的问题中派生出来的 您经常查询用户的好友列表吗? 你想快速知道一个用户有多少朋友吗? 你认为一个用户会有多少朋友? 系统将有多少用户 这些问题将帮助您在方法1和方法2之间做出选择。 如果您对这些问题的答案进行评论,我将能够向您介绍我对该模型的看法
无论如何,如果您真的想删除SQL,您可能需要查看。如果必须使用DynamoDB,那么只需将引用保留在同一个表中(方法1)。您是否已经决定使用哪个数据库?有两个原因: 其他一些NoSQL数据库有一个充满活力的社区和优秀的文档
GraphDB似乎最适合您上面的问题,但您更清楚您的系统的整体情况。是的,我一直在考虑(方法1),我已习惯于使用Dynamodb。谢谢,我会记住的嗨,大卫,我也被你面临的问题困扰着。我的问题是,既然您似乎使用了方法一,您是如何处理此属性的更新的?由于需要更新两个项目(对于user1和user2),因此如果出现崩溃并且只有一个用户的friends属性得到更新,而其他属性没有得到更新,您如何处理事务部分以避免出现问题?