MongoDB SQL is Agile

bhuztez · 2013年01月10日 · 最后由 hooopo 回复于 2013年08月23日 · 3990 次阅读

http://lucumr.pocoo.org/2012/12/29/sql-is-agile/

我也是这么认为的。最开始的时候,总是要先搞清楚数据本身的约定以及数据之间的联系,第一步总是要 normalize 的,schemaless 在这里并不能带来什么帮助,反而更麻烦了。从这个角度来看,MongoDB 显然不适合用来开发原型。

假如你不熟悉 SQL,可以看看这个博客

http://database-programmer.blogspot.com/

接着才是 RDBMS 处理不好的地方要 denormalize,有必要的话再引入别的类型的数据库

你可以放弃几乎所有 JOIN,获得接近线性扩展的集群能力。这是 MySQL NDB,Mnesia 之类的数据库了。

也可以预先定义好需要哪些 JOIN,把相关数据放在一起,从而为这些 JOIN 优化。Google F1 和 Oracle 的 Table Cluster 就是这么干的。有没有开源实现,我还没了解过,你可以来补充一下。

http://research.google.com/pubs/pub38125.html http://docs.oracle.com/cd/E11882_01/server.112/e25789/tablecls.htm#i25478

再后面就得等着被 CAP 坑了。

http://blog.nahurst.com/visual-guide-to-nosql-systems

CouchDB 用来做 aggregation,通过放弃 consistency,换取用空间换时间的机会 Memcachedb 之类的用来做缓存 BigTable 之类的,没用过,据说很有用

相反我认为 mongodb 很适合在原型阶段作为数据存储,就是因为 schema free。

什么叫原型,为什么要使用原型。 就是很多对象,很多流程还不确定,需要原型来验证,帮助梳理,帮助思考,迅速的使用可见的原型来验证一些事物,有一个直观的可见对象。

在原型的时候,你根本确定不了那些数据需要保存,数据的那些属性需要保存,今天可能是这几个,明天可能是另外的,带来的数据库结构维护,会很痛苦的。

熟悉什么用什么

#1 楼 @woaigithub

schema 又不是不能变啊 ...

schema 就是帮助梳理,帮助思考

@hooopo LS 说得好。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册