MongoDB 为什么都用 mongodb?

cqpx · 2011年11月06日 · 最后由 xiaoronglv 回复于 2014年06月12日 · 14304 次阅读

请问你们在 sql 系和 mongodb 之间作出选择的时候是基于什么理由?

我倾向于前者的理由是:

  1. 成熟,不管是 dbms 本身还是 activerecord

我不选 mongodb 的理由是:

  1. 太新了

比较常见的理由是

  1. easy replication/sharding,这个我还没去了解是什么意思,请问小规模的网站用的上些吗?
  2. schema-free,不知道有哪些情况是必须要这个功能才可以完成的?

请多指教,谢谢

一开始用 mongodb 是为了尝鲜,后来用着也没什么问题,就继续用了。我写的都是小网站,组件不成熟影响不大,解决问题也是提高能力的机会。

分布式用不上

模式自由让开发过程的束缚更小,比如改个字段名(未上线前),就在代码改就好了,不用 rake db:migrate。上线之后该迁移还是要迁移。

然后内嵌文档和 array 这样的数据类型让数据结构更符合人脑的思维。比如 tags,存成文档的一个字段 (Array) 就行了,搜的时候

Topic.where(:tags => 'ruby')

就行了。比 SQL 用关联表实现轻便很多。

一开始我也是为了尝鲜,后面慢慢喜欢上了 MongoDb 的数据结构让人爱不释手

实际上现在 MongoDb + Rails 结合已经很成熟了

「有人在 Hacker News 上贴出了一篇匿名贴声泪俱下的控诉了 MongoDB 的 8 大罪状,如果你也打算在大数据量,高并发,高负载的环境下尝试 MongoDB,那么或许你应该先看看这篇贴然后再做决定」 http://heikezhi.com/2011/11/09/dont-use-mongod/

#3 楼 @Los 类似的质疑在 Ruby on Rails 大潮时代是多么相似

#4 楼 @Rei 我只是恰好看到这篇文章顺便转发到这,并没有否认 MongoDB。 NOSQL 跟 RDBMS 其实并没有冲突,看场合用,比如我就喜欢 mysql 配合 redis 着用,而在 rails 中使用 Mongoid 或 MongoMapper 更是可以实现绝大部分 mysql 的功能。但我现在唯一对 MongoDB 的应用就是利用它来存储爬虫爬回来的大量数据,并存储页面分析的中间数据与结果,这个应用运行在一个独立的服务器里,并不直接对外大量用户进行提供访问,此采用 MongoDB 的最根本原因是分析页面时可以很随意的构建数据结构,但 rails + web 开发上我个人更倾向于选择 mysql 之类的数据库,原因是 rails + mysql 的方案相对成熟而且在产品环境下更为节约资源(比如存储空间和内存的占用之类的),而且用 mysql 并没有出现只有使用 MongoDB 才可以解决的情景。

#5 楼 @Los 那篇文章如果属实,那 mongodb 是比我想象中的稳定性要差。我也在别的地方转发了这篇文章。

其实我是没啥发言权的,自己用 Mongodb 写的都是 toy,工作中要维护的是 MySQL(大量老数据)。曾经用 Mongodb 写了一部分功能,后来考虑到一个网站用两个数据库,以后维护会麻烦点,也不是非 Mongodb 不可的功能,就换回 MySQL 实现了。

但是另一方面,我觉得用 Mongodb 写写 toy 也未尝不可。很多文章都把焦点放在并发、分布式、海量上面,但是真到这个层面,怎么可能一换数据后端就让机器自动解决,难处依然在那里。我更喜欢用 Mongodb 实现各样的小构思,模式自由,抛下关联查询、数据事务这些“重”的东西,更容易考虑一样事物本身应该怎么表达,怎么在总体上实现优雅的设计。

#6 楼 @Rei ^^ 其实 Mongodb 有个小原因让我使用起来很别扭,Mongodb 原生 ObjectID 是一串 hash 值(当然这是优秀特性之一,对分布式相当好的设计),但我习惯递增的 id(其实只是在 url 表现上看起来好看),虽然可以人为的为 Mongodb 设定 id,但这种硬干的方式让我觉得相当「脏」,然后其他方面无论如何好的设计都无法弥补这一点感觉,还是会觉得好「脏」

#7 楼 @Los 我也受不了那个 id 了,尤其是数据量不大的小网站。所以我和 @huacnlee 都处理了这个 id。

@Los @Rei 作者都承认那篇文章是 hoax 了。恶作剧 http://news.ycombinator.com/item?id=3205749

不过还是没有什么诱人的原因让我转到 mongodb。。再观察观察吧

#7 楼 @Los 自增 id 装这个 Gem,全自动的,装上就可以用了。 https://github.com/huacnlee/mongoid_auto_increment_id

#10 楼 @huacnlee ^^ 还是脱不了心理洁癖,感觉硬干出递增 id 已经跟 mongodb 设计初衷有冲突了

仅仅因为感觉 mongodb 很酷~

话说 yottaa 把 mongodb 用的杠杆的!!

开始倾向与 HBase 的,借书研究了一段时间 Hadoop,HBase 之类东西,搞的一头雾水,大致就明白了 HBase 是一个山寨谷歌 BigTable 的东西,后来无意间接触到了 MongoDB,觉得这就是我想要的,HBase 该有的它都有了,而且轻量,部署简单。。。几乎可以代替关系型数据库的绝大多数功能,真的很喜欢。

@wxianfeng 你是 yottaa 的呀?我还去那里面试过...

yottaa 是公司名字么?

#9 楼 @cqpx 8 宗罪的 2,3,5,6 我都碰到了。或许是我用的不好,但不管怎样,短期内不会再用它了。

忽然翻到老帖,现在大家新项目对数据库选型是怎么做的?

#8 楼 @Rei

我觉得他的 id 机制挺好的 😄

  1. 防止数据被爬
  2. 防止恶意构造 url 访问
需要 登录 后方可回复, 如果你还没有账号请 注册新账号