我的项目(在Ruby on Rails 3中)是开发一个具有以下功能的“社交网络”网站:
所以基本上我们有用户,链接和评论,以及所有连接的。社交网络中一个有趣的事情是User表与自身有多种多样的关系。
我认为我可以使用SQL和RoR来处理这种复杂程度。
我的问题是:将MongoDB(或CouchDB)用于此类网站会不是一个好主意?
说实话,我认为答案是否定的。 MongoDB似乎不适合多对多关系。我想不出一个好的MongoDB方式来实现友谊关系。我已经读过Diaspora从MongoDB开始,但后来切换回经典SQL。
但网上的一些文章为MongoDB的社交网络辩护,最重要的是我想做出明智的决定,不要错过MongoDB的一个非常酷的方面来改变我的生活。
另外,我听说过图形数据库,这可能很棒,但它们对我来说似乎太年轻了,我不知道它们如何适合RoR(并且不提及heroku)。
那么,我错过了什么吗?
谢谢,
阿瑟
答案 0 :(得分:9)
我喜欢MongoDB并且使用它很多,但我认为如果你正在处理关系数据,你应该使用正确的工具。我们有关系数据库。 Mongo和Couch是文档商店。
如果你要维护很多文档间链接,那么Mongo会有一个严重的劣势。只保证一个文档的写入是原子的。因此,如果您不小心您的架构,则可能会对关系进行不一致的更新。MongoDB的好处在于它非常擅长扩展。您可以分片并创建副本集。 Foursquare目前使用MongoDB,它一直很好用。 MongoDB也可以进行map-reduce并具有良好的地理空间集成。开发MongoDB的团队非常出色,我住在他们所在的纽约并且遇到过他们。你可能不会有扩展问题,但我会考虑开始。
至于Diaspora切换......我不想跟随他们正在做的任何事情:)
你对图dbs的评论很有意思。我可能不会使用图形数据库作为我的主要数据库,但在处理关系时,您可以使用它们做出惊人的事情。实际上,通常来自图表数据库公司的人员会给你的演示是从社交网络中提取关系知识。但是,没有什么能阻止您将来使用这些进行网络分析。
总之,当你在这里开始时,你还没有遇到大规模的问题,而且可能是时间和金钱都有限。请记住,即使Facebook不使用一种技术,他们基本上已经扩展到NoSQL以获得某些功能(如Facebook消息)。将来使用Mongo和gridFS来处理图像上传或地理位置等等,没有什么可以阻止你。随着需求的变化,增长是很好的。我认为你在这里有一个SQL应用程序的直觉是正确的,并且MongoDB带来的好处暂时无法实现。
答案 1 :(得分:8)
我的建议是使用您最熟悉的任何内容,以便您可以快速启动并运行。从你的问题来看,这听起来像是SQL而不是MongoDB。
答案 2 :(得分:4)
有趣的可能性是Riak。它是键值存储和图形数据库之间的交叉。 userID可以是您的密钥,注释和链接可以存储在您的值中。但是Riak也有关键的关键linking。这可用于将您的用户与朋友联系起来。链接是不对称的,所以你需要处理两个方向的添加和删除,但这不应该太难。
但请注意,Riak不是文档数据存储区,这意味着它与价值无关,这意味着它无法帮助您提取价值的内部部分,这意味着如果您想要提取评论,则需要首先检索与用户一起存储的每个评论和链接。
您可能还想查看其他图表数据库。社交图是图数据库的典型用例。
答案 3 :(得分:0)
Sorry, but you got to start learning about graphs. Use graph databases that spits out data in JSON format & write it to your Mongodb database.You are dealing with a network , which means there must be a graph of some sort that will allow you to create an ego(user, for example) or focal point or logical center, which is connected to other nodes around it.Nodes could be properties of a particular user such as name, likes,friends, pictures etc. An ego graph would resemble a hub and spokes if you were to draw it.
For further reading, you can refer to how Facebook implemented it's Graph API - https://developers.facebook.com/docs/graph-api/overview/
Here is an attempt to connect Mongodb and Neo4j graph database - https://neo4j.com/developer/mongodb/