使用MongoDB时我应该如何设计Users and Friends表(Rails)

bal*_*anv 3 ruby-on-rails mongodb mongoid

我正在一个社交网络项目中工作,建议的数据库是MongoDB。

我之前曾参与过各种项目,并在关系数据库系统中设计了数据库,但是由于我是NoSQL db(MongoDB)的新手。我一直在设计东西。

考虑下面的示例,

1)该应用程序将具有“用户和朋友”表来保存用户和用户的数据。

现在,下面的设计正确吗?

用户:

_id       username password other_fields
----------------------------------------
2gsyexej2 balan    adsfasf  ..
Run Code Online (Sandbox Code Playgroud)

user_friends:

_id user_id friends
--------------------
1  2gsyexej2 friends
               - 0 
                 - friend_user_id = asdfdf23adfsasdf
               - 1
                  - friend_user_id = efex89sdfsw0dfssf
                        etc., 
Run Code Online (Sandbox Code Playgroud)

在以上模型中,我使用了“手册参考”,从用户表中获取了用户ID,并将其用作user_friends表中的参考。

这种方法正确吗?如果没有,请提出一个更好的方法。

谢谢,

巴兰

Sam*_*aye 5

一个用户有3亿个朋友。

认真吗 在中文版的Twitter上,最大的追随者是新浪微博,其人均追随者人数相形之下使Facebook和Twitter的总人数相形见is。但是,这种情况很少见。

话虽这么说,将根目录中的朋友关系作为docs(http://docs.mongodb.org/manual/core/data-modeling/)和@jorscas包含起来根本不是明智的。

我可以轻易地想象,随着用户在网站上花费更多时间访问更多好友关系,文档以持续快速的速度增长。由于以下两个原因,这会很糟糕:一个原因是MongoDB范围内的空间碎片,另外两个原因是快速增长的文档可能需要在磁盘上移动,这本身就是一个缓慢而密集的操作。还有更多原因,但这足够了。

您还必须考虑16meg限制,即使8,000个连接也可以达到该限制。

所以我已经说过不要嵌入。您知道在关系模型中设计此方法的方式吗?我会这样做,在需要时对用户之间的关系进行规范化的同时进行规范化。