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 之类的,没用过,据说很有用