第一、开源软件的特征。
开源软件的特征就是由社区这样的非盈利组织维护。对传统行业来讲,最大的问题是开源软件不能给予一个商业承诺,而自己的业务连续性需要得到最大限度的保证。对于一些行业来讲,甚至停电、火灾、地震(甚至战争),都要有业务连续性保证的预案,如果因为使用的基础软件总出问题,而导致数据库停止服务,业务中断,是绝对接受不了的。
我之前看到过很多大客户那里,都有数据库厂商(Oracle、DB2)的人常驻在哪里,以备不时的咨询和问题处理。Oracle和IBM在DBA培训上也做得非常好,可以培养出很多专业的数据库维护的工程师和专家,来解决客户的问题,进行例行检查、维护工作。
第二、事务性和读写一致性的需求
当然,现代互联网应用,的确很多场景不需要那么强的事务性和读写一致性,但是并不是所有的应用都如此,比如银行应用,比如和钱有关的财务、OA等等,都有很强的事务性要求,否则,造成的损失由谁来负责呢?
例如,银行转账一定要在事务里从支付方扣钱,增加到向收款方账户,如果事务得不到保障,意味着什么?
反而,复杂sql还好说一些。可以从设计层面尽量避免。
当初,也就是有这方面的需求,才会有关系型数据库的产生;显著,仍然有这方面的需求,所以,关系型数据库依然是一些关键性应用的基础;在同时,因为有了很多互联网应用对事务性和读写议执行要求不那么强烈,只是要求水平扩展、低成本这一需求,所以,才出现了Nosql数据库。
基于上面的因素,我认为,Nosql数据库现在最适合的场景是还是互联网应用和非关键应用,其优势是低成本、大数据量、在廉价硬件上更加容易水平扩展。在这个场景下,出现问题不会造成多大的影响;或者,一些网站之类的,可以基于Nosql数据库来运营,有了问题从网上找资料解决;再有,就是有足够的资源和技术力量的情况下,培养自己Nosql方面的工程师,来维护(当然这样最好)自己的数据库。
(1)记录日志一般不是业务流程的关键因素,即便这部分因为各种原因出现问题,不会阻断正常的业务,造成大的问题和社会影响;
(3)日志数据量非常大,使用关系型数据库的总体成本很高。
(4)数据挖掘是离线数据,使用分布式的数据库分析有天生的优势(例如使用Hadoop的MapReduce)。