MongoDB是一个社交网站(在Ruby on Rails中开发)的好主意吗?

Art*_*hur 21 sql ruby-on-rails social-networking mongodb nosql

我的项目(在Ruby on Rails 3中)是开发一个具有以下功能的"社交网络"网站:

  • 用户可以是朋友.这是相互的友谊; 不像Twitter那样不对称.
  • 用户可以发布链接以共享它们.用户的朋友可以看到该用户共享的内容.
  • 朋友可以对这些共享链接发表评论.

所以基本上我们有用户,链接和评论,以及所有连接的.社交网络中一个有趣的事情是User表与自身有多种多样的关系.

我想我可以用SQL和RoR来处理这种复杂程度.

我的问题是:将MongoDB(或CouchDB)用于此类网站是否是一个好主意?

说实话,我认为答案是否定的.MongoDB似乎不适合多对多关系.我想不出一个好的MongoDB方式来实现友谊关系.我已经读过Diaspora从MongoDB开始,但后来切换回经典SQL.

但网上的一些文章为MongoDB的社交网络辩护,最重要的是我想做出明智的决定,不要错过MongoDB的一个非常酷的方面来改变我的生活.

另外,我听说过图形数据库,这可能很棒,但它们对我来说似乎太年轻了,我不知道它们如何适合RoR(并没有提到heroku).

那么,我错过了什么吗?

谢谢,

阿瑟斯

Mic*_*ile 10

我喜欢MongoDB并且使用它很多,但我认为如果你正在处理关系数据,你应该使用正确的工具.我们有关系数据库.Mongo和Couch是文档商店.

如果你要维护很多文档间链接,Mongo会有一个严重的缺点.只保证一个文档的写入是原子的.因此,如果您不小心您的架构,则可能会对关系进行不一致的更新.

MongoDB的好处在于它非常擅长扩展.您可以分片并创建副本集.Foursquare目前使用MongoDB,它一直很好用.MongoDB也可以进行map-reduce并具有良好的地理空间集成.开发MongoDB的团队非常出色,我住在他们所在的纽约并且遇到过他们.你可能不会有扩展问题,但我会考虑开始.

对于Diaspora切换...我不想跟随他们正在做的任何事情:)

您对图dbs的评论很有意思.我可能不会使用图形数据库作为我的主要数据库,但在处理关系时,您可以使用它们做出惊人的事情.实际上,通常来自图表数据库公司的人员会给你的演示是从社交网络中提取关系知识.但是,没有什么可以防止您将来使用这些进行网络分析.

总而言之,当你在这里开始时,你还没有遇到大规模的问题,而且可能会限制时间和金钱.请记住,即使Facebook不使用一种技术,他们基本上已经扩展到NoSQL以获得某些功能(如Facebook消息).将来使用Mongo和gridFS来处理图像上传或地理位置等等,没有什么可以阻止你.随着需求的变化,增长是很好的.我认为你在这里有一个SQL应用程序的直觉是正确的,并且MongoDB带来的好处暂时无法实现.

  • @arthur在9月份他们推出了一些代码,表明他们不知道自己在做什么.即使是新手程序员也会知道很多安全问题.一些人为他们发布alpha软件辩护,但如果你制作一个删除控制器并且不检查authroization(IE登录的任何人都可以删除任何帐户),那就有问题了.(这是许多问题之一)http://www.kalzumeus.com/2010/09/22/security-lessons-learned-from-the-diaspora-launch/很好地总结了它. (2认同)

Jam*_*est 8

我的建议是使用您最熟悉的任何内容,以便您可以快速启动和运行.从您的问题来看,这听起来像是SQL而不是MongoDB.

  • 是的,但这取决于你的目标.您的目标是学习新事物还是完成项目?听起来你的目标是后者,这就是我推荐使用你所知道的原因.另一方面,如果您的目标是学习新技术,那么请务必使用MongoDB. (3认同)
  • 不过,再想一想:这样想,你永远学不到新东西! (2认同)