NOSQL or NEWSQL
近几年随着大数据生态圈的不断发展,NOSQL也随之声名鹊噪,甚至有超宇传统关系型数据库的风头。不光说的人多了,用到的地方也逐渐增多,尤其做作为大数据生态圈中的一员,被用到越来越多的地方。今天就跟大家捋一捋NOSQL产生的背景以及发展历程,顺便看看这个SQL到底是应该叫NOSQL还是NEWSQL?
NOSQL产生的历史背景
许多人可能认为NOSQL不过是传统关系型数据库的一个分类,其实不然。NOSQL起步并不晚于传统关系型数据库。几乎在E.F. Codd提出关系型理论的同时NOSQL也出现了,不过当时还没有提出NOSQL的概念。在1966年的时候,首次出现了NOSQL数据库,其代表是MUMPS,这是一个键值对(key-value)性数据库,并且支持ACID特性。另外一个NOSQL的代表是Ken Thompson's dbm,同样也是键值对数据库。然而NOSQL概念却是由carlo strozzi于1988年第一次提出的。
NOSQL是怎么一步步发展到现在呢?这不得不说在互联网世界里,需求永远是最大的原动力。随着互联网基础设施的发展以及制造业水平的不断提升,现在几乎人手一部手机,而一部手机上的应用(APP)也至少是两位数量级的。在加上物联网,世界每天产生的数据至少已经达到PB级了。这么大量级的数据,加上数据的结构和schema信息不固定,这些无疑给传统的关系型数据库带来了巨大的挑战。这些挑战包括:存储空间上的巨大压力,非结构化数据如何存储,如何应对数据类型经常变化,在大较大数据量下维护ACID特性的成本,查询效率等等。在这样的挑战下NOSQL就应运而生了,NOSQL不注重数据的结构,针对大量级的数据容易做水平扩展等等。
NOSQL家族
首先需要说明的是就想关系型数据库是一类数据库的统称一样,NOSQL也并非单指摸一个数据库,而是一类数据库的统称。具体包括以下几种类型的非关系型数据库。
Key-value型,也叫键值对性的数据库,主要成员有Redis,Cassandra, Azure, LevelDB, Riak。这类NOSQL数据库的特性是,数据存储在内存中,采用无模式的方式存储数据,与我们日常使用的json格式的数据比较类似,查询返回速度比较快。
Column Store 型,即列式存储性,也加宽列存储。主要成员有HBase, BigTable, HyperTable,ScyllaDB。所谓的列式存储是与传统的关系型数据库按行存储而言的。列式存储的一大优势的是对列里面的数据内容没有限制,很好的支持列的扩容以及数据内容变更,尤其是非结构化数据和半结构数据的支持。
Document Database,文档型数据库,主要包括MongoDB和CouchDB。这种类型的数据库中的每个文档都有自己的数据和用于检索它的唯一键。对于存储、检索和管理面向文档的但仍有部分结构化的数据会是一个很好的选择。
Graph Database,图数据库,主要包括Polyglot和Neo4J。这种类型的数据库主要是针对复杂数据类型的存储,就像图一样各个图之间的关系是错综复杂的,很难用传统的关系型数据库来表达。
其他一些还包括,Time-series时序数据库,Text search文本搜索性,Elasticsearch。还有部分同时支持多种类型,如Cassandra 和 ScyllaDB
NOSQL与RDBMS的对比
我们知道关系型数据库的核心是关系型数据理论,而这个理论的关键又是关系代数和强一致性。所谓的强一致性就是数据库事务的ACID特性,用来确保数据的可靠和一致。这也是关系型数据库经常被用在银行、政府、电信行业的原因。相比而言,NOSQL是不遵守ACID特性的,它所遵循的是CAP理论,(C:一致性,A:可用性,P:分区容错性),三者只能得起二。具体来看,二者在以下几个方面存在差异。
我们再重点说一下二者的使用场景。RDBMS适合数据结构稳定,规则清晰,SCHEMA基本不怎么改变的,对数据查询效率有一定的要求,强依赖数据一致性的业务。一般是前端应用,银行业务等。而NOSQL的主要应用是大数据体系下,对数据格式要求不高,而且数据格式、内容经常发生变化的非结构化和半结构化的较大量级的数据。
NOSQL or NEWSQL
有人把NOSQL说成是’NOT SQL‘,我猜想应该是说它不支持标准的SQL语法吧,还有人把NOSQL说成是’NOT ONLY SQL‘,不仅仅是一种SQL,更多的是一个解决大数量下的存储问题的数据存储系统。不过我觉得叫成NEWSQL也未尝不可,首先这是相对于大家熟悉的旧的关系型数据库而言的,再则各类NOSQL都也一直在向着支持标准SQL语法的方向上前进,毕竟大家熟悉还是传统的SQL,而只有得到了用户,产品才有市场。当然传统的数据库也在不断的向着NOSQL的方向上努力,如支持json类型的数据,部分已经在尝试水平扩展等。
当然不论是名称是NOSQL还是NEWSQL,这仅仅是一个名字,真正使用者是不会在乎的,他们更关心的是你能解决什么问题,节省多少成本,带来多少效益。所以你的价值不在你的名字而在你的能力。
版权声明: 本文为 InfoQ 作者【大唐小生】的原创文章。
原文链接:【http://xie.infoq.cn/article/7989ecd5d3311c116bb2ba293】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论