关系数据库的封建迷信

我理解这篇文章总体意思是:

现在进入多核时代,只要是运行在多核上多用户同时读写都回避不了分布式和并发这两个课题。我们不能因为我们熟悉关系数据库,就对之产生100%信任,其实MySQL 这些关系数据库在处理分布式 并发以及一致性上非常复杂,而且有问题在其中,会打折扣。

比如缺省设置READ COMMITTED隔离级别其实并不能带来真正高一致性,而REPEATABLE READ类似于串行序列化,拒绝并行计算,严重浪费多核资源。

所以,这些数据库其实要么是使用类似加锁技术实现事务,这种类似Java中同步锁等应用一样,这种锁的多线程并发很差;要么是使用一种类似最终一致性的READ COMMITTED,也并不能给你真正高一致性。

与其接受传统关系数据库教廷式的洗脑,不如打开这个盒子,实现Out-of-box,NoSQL是这种尝试,DDD和CQRS也是这种尝试,将分布式和并发主动权掌握在开发人员自己手里,而不是打破脑袋搜集各种关系数据库资料,拜山各种关系数据库牛人,这种行为才是真正封建迷信呢。

什么是真正封建迷信?就是自己无法或不愿主动研究自然的秘密,期待牛人大牛为自己指点迷路,迷信于一些牛人的神奇“智力”,缺乏对自己的自信。


[该贴被banq于2014-12-10 08:47修改过]

企业中大量存在多条件实时查询,如果使用nosql如何应对这一需求,请指教。

我很想把关系数据库的特性搬进anycmd的权限引擎中,几乎100%的功能级的权限数据都是在内存中的,关系数据库只是用来持久化数据用的。肯定会遇到关系数据库所遇到的同样的问题,一直很害怕它恐惧它。现在觉得搬进来是肯定要搬了,找有更多这方面知识的人上“梁山-开源权限引擎”
比如内存中的这个RoleSet角色集的管理就会遇到和数据库一样的读写一致性问题http://git.oschina.net/anycmd/anycmd/blob/master/src/Anycmd/Host/AC/MemorySets/Impl/RoleSet.cs
但是这是权限数据读写一致性的问题而不是数据库数据读写一致性问题,详细思考这些数据所处的业务场景后可能可以实现出比数据库更加高效的读写一致性。

2014-12-12 09:00 "@zyh5160"的内容
企业中大量存在多条件实时查询,如果使用NoSQL如何应对这一需求 ...

三种办法:
1.CQRS读写分离,写使用NoSQL或内存领域模型,读使用传统关系数据库。

2.是设计专门针对查询分页的NoSQL表。使用Cassandra建立一个可伸缩扩展的事件服务这个英文PDF中有关于分页查询的Cassandra表设计,中文没有翻译,比较容易懂,可参考。

3.使用Map/reduce,小的查询使用函数编程的Map fold之类函数,数据量大使用NoSQL或Hadoop提供的Mapdreduce: 在MongoDB中使用Map/Reduce

如果是第一种CQRS读写分离,那NoSql如何与关系型数据库打交道呢?比如写完后,另一线程就会有读,这时数据是要从哪里读呢?

2014-12-13 01:02 "@freeren"的内容
另一线程就会有读,这时数据是要从哪里读呢? ...

这在CQRS和EventSourcing中讨论比较多,我这里不重复回复,总之,读写两个数据库之间实现的是最终一致性复制,这种复制类似关系数据库内部的主从复制一样。