原文在 Sarah Mei 的个人博客上
http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/
我以前工作过的一个项目很类似,开始看的时候很适合 Document types, 越到后来业务需求越复杂越是把 Mongo 硬当作关系数据库用
个人感觉越是贴近业务的数据越要考虑 关系型,越是非业务型的数据可以考虑 其他的方案
说到底就是觉得 MongoDB 不能存储关系而矣,感觉是水平不行,没有外键可以使用有模式的框架做出外键,而且也不一定一直会没有的吧,Mongo 才出来几年……
@knwang 我以前工作过的一个项目很类似,开始看的时候很适合 Document types, 越到后来业务需求越复杂越是把 Mongo 硬当作关系数据库用 这纯粹就是用惯了 mysql 的人在用 mongo,要用 mongo 真的要研究一下他的设计思想。这个很重要滴。说~!
#15 楼 @zhangjinzhu 恩。其实我们的比较简单,我说下吧: 原来是 a 持有对 b 的引用,即外键,所以在 a 的 collection 中存了 b 的 id,业务中有一个业务需要 a 和以及 b 的部分字段才可以完成,刚开始直接用 a.b.column 来获取,但是后来这个业务的查询越来越多,甚至要批量批量的查询。我发现这种效率低下了,所以就把对应的 b 中的两个字段直接放到 a collection 中,这样,我只需要查出 a 就可以完成业务了。。但是这样造成的问题就是,我在 save 或者 update 的时候就需要去更新和维护 a 中对应 b 的 column,因为 update 操作并不是非常频繁,所以,我觉得是可行的。就暂时这么搞了~!
问题恰恰是当时的项目几乎是 Mongo 的最佳用例 - 从数据本身的结构,完全是孤立的深层次的 Documents, 而没有任何需要 cross references 的地方,不需要任何冗余; 项目需要支持非常大的 scale,深度的 Partition 和高可用,不需要灵活的分析,简直就是 Mongo 的案例型的项目。
前面很久的时间用 Mongo 非常舒服,mongoid 这个库也就是从这个项目里面抽取出来的,但是做到两年以后就越来越感觉别扭了,应为很多的新的硬性需求和最前面的数据结构假设非常不一样,也是可以实现,但是就觉得 Mongo 不是方便,而是处处别扭。
和 Sarah Mei 文章里将的案例非常相像。
@jarorwar 嗯,不过等冗余变的太多的时候,维护冗余的逻辑会遍地都是。。。然后会出现各种莫名的 bug,因为冗余忘记更新了。。。
mongodb 看似比 SQL 简单,但和封装 SQL 的 ORM 相比,还是有些差距,因此还不如挑个好的 ORM 用呢
#26 楼 @jarorwar mongodb 很强大没人否认,我个人观点没必要全盘否定,但是也要客观评论,我和 @zhangjinzhu 基本一致,mongodb 自身的灵活性对于应用层的维护是灾难。
说白了吧,是双刃剑,看场景和需求。
@jarorwar mysql 存序列化后的 json 就可以了么,只是这些动态增加的字段搜索可能是个问题,但如果你想搜索的时候,就在跑程序的时候动态的用 sql 增加一个字段呗,然后赋值到这个字段就好了,也很简单。
你可以用 mongodb 加字段,又没有法律规定你用关系型数据库不可以。
mongodb 很适合这种国内行政机构的数据,省市县区乡逐级嵌套,而且动不动就是几亿的数据量,用 mysql 就得弄很多表相互关联,而且分表的话各个地区的数量级又差别悬殊,有的城市象重庆,北京几千万,象西部省市的一个省才几百万
为什么你应该永不用 java? 为什么你应该永不用 web? 为什么你应该永不用 手机? 我知道里面肯定有合乎情理的理由,但还是反感这样的标题党,无论他是大牛还是小楼咯,这标题天生就是为引起争端而生的,往往也无异于进步。