关系型数据库产品很多,如MySQL、Oracle、Microsoft SQL Sever等,但它们的基本模型都是关系型数据模型。NoSQL并没有统一的模型,而且是非关系型的。常见的NoSQL数据库包括键值数据库、列族数据库、文档数据库和图形数据库,其具体分类和特点见表1.1。
表1.1 NoSQL数据库分类和特点
NoSQL数据库并没有一个统一的架构,两种不同的NoSQL数据库之间的差异程度,远远超过两种关系型数据库之间的不同。可以说,NoSQL数据库各有所长,一个优秀的NoSQL数据库必然特别适用于某些场合或者某些应用,在这些场合中会远远胜过关系型数据库和其他的NoSQL数据库。
常见的NoSQL数据库分为以下几种。
(1) 键值数据库。这一类数据库主要会使用到一个散列表,这个表中有一个特定的键和一个指针指向特定的数据。键值模型对于IT系统来说,其优势在于简单、易部署。键值数据库可以按照键对数据进行定位,还可以通过对键进行排序和分区,以实现更快速的数据定位。
(2) 列族数据库。列族数据库通常用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。如图1.9所示,此列族数据库表中由两行组成,每一行都有关键字Row Key,每一行由多个列族组成,即Column-Family-1和Column-Family-2,而每个列族由多个列组成。具体列族数据库的概念和原理参照后面HBase章节。
图1.9 列族数据库
(3) 文档数据库。文档数据库的灵感来自Lotus Notes办公软件,它与键值数据库类似。该类型的数据模型是版本化的文档,文档以特定的格式存储,如JSON。文档数据库可以看作键值数据库的升级版,允许之间嵌套键值,如图1.10所示。文档数据库比键值数据库的查询效率更高,因为文档数据库不仅可以根据键创建索引,同时还可以根据文档内容创建索引。文档数据库详细概念参照后面的MongoDB章节。
图1.10 文档数据库
(4) 图形数据库。图形数据库来源于图论中的拓扑学,以节点、边及节点之间的关系来存储复杂网络中的数据,如图1.11所示。这种拓扑结构类似E-R图,但在图形模式中,关系和节点本身就是数据,而在E-R图中,关系描述的是一种结构。
图1.11 图形数据库
本章首先介绍了数据库系统的相关概念,重点在于关系型数据库的特点,及其在海量数据存储上的瓶颈,在此环境下产生的NoSQL数据库的优势。
然后介绍了分布式数据库的数据管理,如何在分布式系统中达到一致性、可用性和分区容错性的平衡,大部分NoSQL数据库弱化了一致性的要求来满足系统数据的可用性和分区容错。
最后介绍了4种NoSQL数据库,并简单介绍了它们的数据模型、应用场景、优缺点等。
1.NoSQL数据库与关系型数据库有哪些区别?
2.什么是CAP原理?在分布式环境下怎样正确使用CAP策略?
3.在数据一致性问题上,ACID与BASE的差别是什么?分别适合哪种场景?
4.NoSQL数据库有哪几类?分别适用于哪些场景?