注意:
本文侧重于大数据下的NoSQL数据库特点,在介绍NoSQL数据库之前,需要简单介绍下数据库种类的发展史,有因有果的逻辑才能被大家所认可嘛。
数据库早期
计算机刚刚兴起的年代,是没有专门存储数据的库的,基本上所有的数据信息都是以文件的形式存取,也就是无库,所以当时计算机也是比较冷的行业,毕竟刚刚起步嘛,没有系统的标准来规范这些业务标准。后来渐渐有了层次状数据库、网状数据库,但这些数据库还是不能被大规模的商业化,只有极个别有实力的公司可能会采用这种数据库方式存储企业内部的相关信息,而且维护起来相当麻烦,归根结底还是标准的问题,比如对数据库读写的标准等等,这些标准就不一一细说,造成了很大的企业成本开销。基于标准这一缘故,直到上世纪80年代,关系型数据库统一了规范,很快发展成了主流的数据库存储模式。数据库的具体发展可参考此网址:http://www.cbdio.com/BigData/2016-02/24/content_4651751.htm
发展
关系型数据库具有的优势直到现在也是无可替代的,例如关系型数据库擅长小量数据的读写存储、擅长复杂的SQL操作、支持事务机制等等,所以到现在出现了很多的关系型数据库,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及Access数据等等,各有优缺点。
但是到了大数据时代,人们更多的数据和物联网加入的数据已经超出了关系数据库的承载范围。刚开始解决大数据时代的高并发的访问请求一般都是采用的集群同步数据的方式处理,什么意思呢?就是将数据库分成了很多的小库,每个数据库的数据内容是不变的,都是保存了源数据库的数据副本,通过同步或者异步方式保证数据的一致性,每个库设定特定的读写方式,比如数据库a负责查询,数据库b负责增加等等以此类推,将业务在物理层面上进行了分离,但是这种方式依旧存在一定的负载压力的问题,企业公司的数据在不断的扩增中,后面就采用分库分表的方式解决,对读写负载进行分离,但是这种实现依旧存在不足,有如下几点:
- 底层的集群创建相当的复杂;
- 数据库一般采用的异步方式复制数据,当主库压力较大时会带来较大的延迟,使得主备切换可能会丢失一部分更新的数据,这种情况就需要人工介入恢复,代价高昂;
- 扩容问题,当需要增加集群时,一般会对整个集群重新分区,对数据重新划分,比较复杂,容易出错;
- 数据动态迁移的问题。意思就是在配置集群之前,很多企业不能预测后面的集群分布情况,可能会导致有的库负载重有的反而轻,在运营的过程中可能会对集群进行修改,这个过程也是人工介入,对每个节点进行重新分配。
NoSQL的出现
过度阶段的人们根据经验总结发展出了NoSQL(Not Only SQL)数据库。NoSQL数据库是大数据下数据库的统一简称,和关系型数据库一样,只是一个象征性意义的词汇,本身并不是数据库,英文解释为“Not Only SQL”(不仅仅是SQL),意思就是在SQL上衍生出来的,相当于SQL的补充,但为了做区别故称为NoSQL数据库。NoSQL数据可以大致分为4种类型:列族数据库(BigTable、HBase、Cassandra、Amazon SimpleDB、HadoopDB等等)、键值数据库(Redis、SimpleDB、Scalaris、Memcached等等)、文档数据库(MongoDB、CouchDB、Perservere、Terrastore、RavenDB等等)、图数据库(Neo4J、InfoGrid、OrientDB、GraphDB)。如图:
但现在很多大企业在运营时,并不是仅仅只使用一种数据库,而是多种数据库一起混合协调,将整个系统达到最优,也因此产生了NewSQL数据库,其实就是混合型数据库架构的统一叫法,它是为了将关键业务和非关键业务进行一统管理。关系型数据库、NoSQL和NewSQL数据库的大致关系如下图(注:OldSQL是指传统的关系型数据库):
好了说了这么多,一张图便可以将目前市场主流的数据库类型的关系表达清楚,如图:
总结:关系型数据库和NoSQL数据库各有优缺点,彼此之间无法取代。在应用场景上,关系型数据库适用于电信、银行等关键性业务系统,保证强事务一致性,而NoSQL数据库适用于互联网企业、传统企业等的非关键性业务(例如数据分析)。