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表中的参考。
这种方法正确吗?如果没有,请提出一个更好的方法。
谢谢,
巴兰
一个用户有3亿个朋友。
认真吗 在中文版的Twitter上,最大的追随者是新浪微博,其人均追随者人数相形之下使Facebook和Twitter的总人数相形见is。但是,这种情况很少见。
话虽这么说,将根目录中的朋友关系作为docs(http://docs.mongodb.org/manual/core/data-modeling/)和@jorscas包含起来根本不是明智的。
我可以轻易地想象,随着用户在网站上花费更多时间访问更多好友关系,文档以持续快速的速度增长。由于以下两个原因,这会很糟糕:一个原因是MongoDB范围内的空间碎片,另外两个原因是快速增长的文档可能需要在磁盘上移动,这本身就是一个缓慢而密集的操作。还有更多原因,但这足够了。
您还必须考虑16meg限制,即使8,000个连接也可以达到该限制。
所以我已经说过不要嵌入。您知道在关系模型中设计此方法的方式吗?我会这样做,在需要时对用户之间的关系进行规范化的同时进行规范化。