RDBMS vs. NoSQL 合做仍是竞争

欢迎转载,转载请注明出处,徽沪一郎。sql

因为近期手头的工做和数据库的选型相关,纠结因而否使用一款NoSQL数据库来替换已有的MySQL数据库。在这个过程当中随着学习研究的深刻,对于两者的异同有了一些初步的认识和想法,将这些想法暂时记录下来,权且做为进一步学习数据库领域知识的开端。数据库

数据库要解决的主要问题

不论是RDBMS仍是NoSQL,在大的方面他们都属于数据库这个范畴,这个范畴以内所要面临的一些共同问题有哪些呢。下面的图是一个大体的概括。数据结构

从图中能够看出,一个数据库系统主要解决如下几个问题:框架

  1. 数据的存储,即要存入哪些数据到系统中,固然在data definition这一块,有schema和no schema两种,说白了就是数据格式和数据关系的定义问题
  2. 完成了data definition,那么接下来天然要发生的事情就是将数据真正的存储到系统之中,即针对数据的各类操做crud(create, read, update and delete)
  3. 数据存储进来以后,须要挖掘数据的意义或者利用已有的数据进行统计分析,data analytic固然也能够说是data retrieval,我我的倾向于data analytic这一说法
  4. 固然数据库系统还有一个很是重要的方面即data control,哪些人能够访问,哪些人不能访问,不一样的人看到的内容不只相同

结构化和非结构化

RDBMS的一大特色就是数据是严格结构化的,存入的数据必须属于预先定义好的某一数据结构,不然就不能存入,而NoSQL则放松了这一要求。函数

在不一样的应用场景中,二者优缺点立显,好比银行系统,要存储的数据格式通常是事先能够预估,其改变的可能比较少,再好比税务之类的。oop

而在电商和互联网应用中,每每意味着常常进行数据格式的更改,若是采用RDBMS,schema改变带来的开发工做则会很是巨大。学习

数据的一致性

在数据的一致性方面,RDBMS经过外键约束或者trigger等方式在server侧来保证数据的约束。spa

从达到数据一致性的时间来看RDBMS是当即一致(immediately consistency)而NoSQL则是最终一致(eventual consistency),举个应用场景,对银行帐户的任何修改都必须是即时一致的,约不参容忍不一致的出现。server

Scalability

若是说到数据库的动态扩容,则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的技术发展。

相关文章
相关标签/搜索