请问你们在 sql 系和 mongodb 之间作出选择的时候是基于什么理由?
我倾向于前者的理由是:
我不选 mongodb 的理由是:
比较常见的理由是
请多指教,谢谢
一开始用 mongodb 是为了尝鲜,后来用着也没什么问题,就继续用了。我写的都是小网站,组件不成熟影响不大,解决问题也是提高能力的机会。
分布式用不上
模式自由让开发过程的束缚更小,比如改个字段名(未上线前),就在代码改就好了,不用 rake db:migrate。上线之后该迁移还是要迁移。
然后内嵌文档和 array 这样的数据类型让数据结构更符合人脑的思维。比如 tags,存成文档的一个字段 (Array) 就行了,搜的时候
Topic.where(:tags => 'ruby')
就行了。比 SQL 用关联表实现轻便很多。
「有人在 Hacker News 上贴出了一篇匿名贴声泪俱下的控诉了 MongoDB 的 8 大罪状,如果你也打算在大数据量,高并发,高负载的环境下尝试 MongoDB,那么或许你应该先看看这篇贴然后再做决定」 http://heikezhi.com/2011/11/09/dont-use-mongod/
#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 实现各样的小构思,模式自由,抛下关联查询、数据事务这些“重”的东西,更容易考虑一样事物本身应该怎么表达,怎么在总体上实现优雅的设计。
@Los @Rei 作者都承认那篇文章是 hoax 了。恶作剧 http://news.ycombinator.com/item?id=3205749
不过还是没有什么诱人的原因让我转到 mongodb。。再观察观察吧
#7 楼 @Los 自增 id 装这个 Gem,全自动的,装上就可以用了。 https://github.com/huacnlee/mongoid_auto_increment_id
开始倾向与 HBase 的,借书研究了一段时间 Hadoop,HBase 之类东西,搞的一头雾水,大致就明白了 HBase 是一个山寨谷歌 BigTable 的东西,后来无意间接触到了 MongoDB,觉得这就是我想要的,HBase 该有的它都有了,而且轻量,部署简单。。。几乎可以代替关系型数据库的绝大多数功能,真的很喜欢。