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

时间:2014-09-03 07:19:12

标签: mysql amazon-dynamodb nosql

在mysql中,User和Friend Table看起来有些像

  • 用户表
  • ID
  • 名称
  • 电话
  • 状态[已启用/已停用]

===============================================

  • 朋友表
  • user_id
  • another_user_id
  • 状态[如果是或不是朋友]

===============================================

但在DynamoDb中

我对这两种方式感到困扰

方法1。

  • 用户表
  • id
  • 姓名
  • 手机
  • 朋友 - >属性

OR

方法2。

  • 用户表
  • id
  • 姓名
  • 电话

===============================================

  • 朋友表
  • USER_ID
  • another_userid

===============================================

我目前正在使用方法2.问题是以经济有效的方式,延迟和性能对表进行建模的最佳方法吗?

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

我希望我仔细地重复这个问题是可以理解的。

EDITED: @chen

问:Do you often query a user's friend list?

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

问:Do you wish to know fast how many friends does a user have?

答:不,不需要,只要我能得到用户朋友是谁,那就好了。

问:How many friends do you think a user will have?

A:无限制。

问:How many users will the system have?

答:也是无限的。

感谢您抽出时间。

感谢

2 个答案:

答案 0 :(得分:2)

大卫,你遇到了典型的NoSQL问题。

在设计关系数据库时,您可以将数据建模为适合全世界的数据,并尝试将数据分解为表格。

在DynamoDB(和其他NoSQL)中,真实模型源自需要答案的问题

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

这些问题将帮助您在方法#1和#2之间做出决定。 如果您对这些问题的答案发表评论,我将能够就模型给出您的想法。

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

答案 1 :(得分:0)

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

GraphDB最适合您的上述问题,但您更了解系统的全局。

相关问题