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

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

所以基本上我们有用户、链接和 comments ,以及所有相关的东西.社交网络中一件有趣的事情是,用户表本身有一种多对多的关系.

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

我的问题是:在这样一个网站上使用MongoDB(或CouchDB)是一个好主意吗?

老实说,我认为答案是否定的.MongoDB似乎不太适合多对多的关系.我想不出一个好的MongoDB方式来实现友谊关系.我读到过散居者从MongoDB开始,但后来又回到了classic SQL.

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

此外,我还听说过graph DB,它可能很棒,但对我来说,它们真的太年轻了,我不知道它们如何与RoR(更不用说heroku)相匹配.

那么,我错过了什么吗?

推荐答案

我喜欢MongoDB并经常使用它,但我认为,如果你处理的是关系数据,你应该使用正确的工具.为此,我们有关系数据库.Mongo和Coach是文件store .

如果要维护大量文档间链接,Mongo有一个严重的缺点.写入只保证一个文档是原子的.因此,如果不小心使用模式,可能会出现不一致的关系更新.

MongoDB的优点在于它非常擅长扩展.您可以切分和创建副本集.Foursquare目前使用MongoDB,它对他们来说运行得非常好.MongoDB也有 map 缩减功能,并且有良好的地理空间整合功能.开发MongoDB的团队非常优秀,我住在他们所在的纽约,并与他们会面.你可能不会有zoom 问题,尽管我认为从一开始.

至于海外移民的转变...我不想跟踪他们正在做的任何事情:)

不过,你对graph dbs的 comments 很有趣.我可能也不会使用graph DB作为我的主要DB,但在处理关系时,你可以用它们做一些惊人的事情.事实上,graph DB公司的人通常会给你的演示是从社交网络中提取关系知识.然而,没有什么能阻止你在future 使用这些工具进行网络分析.

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

Mongodb相关问答推荐

如何在Mongo Aggregate Query中创建集合的对象ID数组,并在列表中查找另一个集合中的ID

用其他集合中的文档替换嵌套文档数组中的值

如何将数组$拉到对象数组下

在MondoDB中:将对象数组从切片索引数组切片,并通过聚合推入数组

在对象mongodb的数组中查找元素

使用特定关键字和邻近度进行查询和过滤

MongoDb $filter,然后获取非重复计数

分页时根据唯一字段mongodb获取数据

如何替换mongodb中的动态键?

MongoDB 支持的最 Big Data 库数

Meteor 方法与deny/allow 规则

Spring Mongodb @DBREF

在 MongoDB 中按条件分组

Mongoose.js:嵌套属性的原子更新?

在MongoDB中查询一个半​​径内的位置

Mongo聚合框架,排序然后分组不起作用

更新时提示Field name duplication not allowed with modifiers

MongoError:Can't extract geo keys from object

MongoDB Compass timeouts超时

从 Grunt 任务中启动 MongoDB