欢迎转载,转载请注明出处,徽沪一郎。sql
因为近期手头的工做和数据库的选型相关,纠结因而否使用一款NoSQL数据库来替换已有的MySQL数据库。在这个过程当中随着学习研究的深刻,对于两者的异同有了一些初步的认识和想法,将这些想法暂时记录下来,权且做为进一步学习数据库领域知识的开端。数据库
不论是RDBMS仍是NoSQL,在大的方面他们都属于数据库这个范畴,这个范畴以内所要面临的一些共同问题有哪些呢。下面的图是一个大体的概括。数据结构
从图中能够看出,一个数据库系统主要解决如下几个问题:框架
RDBMS的一大特色就是数据是严格结构化的,存入的数据必须属于预先定义好的某一数据结构,不然就不能存入,而NoSQL则放松了这一要求。函数
在不一样的应用场景中,二者优缺点立显,好比银行系统,要存储的数据格式通常是事先能够预估,其改变的可能比较少,再好比税务之类的。oop
而在电商和互联网应用中,每每意味着常常进行数据格式的更改,若是采用RDBMS,schema改变带来的开发工做则会很是巨大。学习
在数据的一致性方面,RDBMS经过外键约束或者trigger等方式在server侧来保证数据的约束。spa
从达到数据一致性的时间来看RDBMS是当即一致(immediately consistency)而NoSQL则是最终一致(eventual consistency),举个应用场景,对银行帐户的任何修改都必须是即时一致的,约不参容忍不一致的出现。server
若是说到数据库的动态扩容,则NoSQL明显技胜一筹。blog
固然MySQL的NDB cluster在动态扩容方面,其能力也仍是不错的。
从数据分析的层面来看,RDBMS和NoSQL之间的成熟度差距是巨大的。
RDBMS为数据分析提供了一个清晰的标准,那就是SQL。利用SQL有很是明确的标准来进行规范,利用这些规范能够对数据进行各类各样的查询,并且内置了许多函数,如average,sum,count之类,让在进行报表分析时,轻松异常。
NoSQL 中的No有人解释为not only的意思,但未尝又不是No SQL二字的缩写了即there is no sql interface in the database system. 固然像MongoDB是支持Sql like的查询语句的,但NoSQL确实没有一套标准规范对数据的查询和分析。
正由于NoSQL中没有一个统一进行数据分析的标准,因此如今出现了不少实时数据处理分析的框架,最火的莫过于Spark,且Spark有最强大的hadoop发行厂商Cloudera的强劲支持,大有一统NoSQL数据分析框架之势,将来的发展势头将会异常迅猛。学会使用Spark有可能会是数据分析行业的一个基本的从业要求。
我的觉得NoSQL不是以传统RDBMS的终结者身份出现,而是对RDBMS的一种补充来填补RDBMS所不能胜任领域的技术实现。
NoSQL在发展的初期,实际上是经过放弃RDBMS的多种约束来达到其两个主要目的,一是数据的海量存储二是数据的动态可扩。至于数据分析则实现手法各异,对实时性的要求不是过高,故MapReduce之类的离线分析能知足其需求。
在至关长的时间内会MySQL仍是有饭吃的,固然须要同时花至关的精力来紧跟NoSQL的技术发展。