2.1.3 NoSQL与关系云的出现
在大数据时代,关系数据库技术的优势与不足日益凸显,使得NoSQL数据库和关系云等新兴数据管理技术成为必要。
关系数据库的优点如下:
(1)数据一致性高。由于关系数据库具有较为严格的事务处理要求,能够保持较高的数据一致性。
(2)数据存储的冗余度低。由于关系数据库以规范化理论为前提,通常,相同字段的数据只能保存一处,数据冗余度较低,数据更新的开销较小。
(3)处理复杂查询的能力强。在关系数据库中可以进行join等复杂查询。
(4)成熟度高。关系数据库技术及其产品较为成熟,稳定性高,系统缺陷少。
关系数据库的缺点如下:
(1)不善于处理大量数据的读写操作。在关系数据库中,为了提高读写效率,一般采用主从模式,即数据的写入由主数据库负责,而数据的读入由从数据库负责。因此,主数据库上的写入操作往往成为瓶颈。
(2)不适用于数据模型不断变化的应用场景。在关系数据库及其应用系统中,数据模型和应用程序之间的耦合度高。当数据模型发生变化(如新增或减少一个字段等)时,需要对应用程序代码进行修改。
(3)数据的频繁操作代价大。为了确保关系数据库的事务处理和数据一致性,对关系数据库进行修改操作时往往需要采用共享锁(又称读锁)和排他锁(又称读/写锁)的方式防止多个进程同时对同一个数据进行更新操作。
(4)数据的简单处理效率较低。在关系数据库中,SQL语言编写的查询语句需要完成解析处理才能进行。因此,当数据操作非常简单时,也需要进行解析、加锁、解锁等操作,导致关系数据库对数据的简单处理效率较低。
为了实现NoSQL数据库的优势,需要以下关键技术的支持:
(1)数据模型。在关系数据库中,采用的数据模型是关系数据模型,其基本思想是将数据存放在多个关系(二维表)中,而关系表由多个元组(行)组成。关系数据库对元组的限制是比较严格的,例如不允许在元组中嵌套另一个元组,不允许存放列表等。但是,NoSQL数据库改变了传统数据库中以元组和关系为单位进行数据建模的方法,开始支持数据对象的多样性和复杂性。例如,不仅支持数据对象的嵌套,而且支持存放列表数据等。NoSQL数据库中采用的主要数据模型有4种:Key-Value、Key-Document、Key-Column和图存储,如表2-2所示。
表2-2 NoSQL中常用的数据模型
②需要注意的是,Key-Document数据库中的Document(文档)并不是特指通常所说的Word、PPT、电子表格等Office文档,而是包含松散结构的”键-值”对的集合,通常用JSON、XML、YAML等表示其松散结构。
(2)数据分布。为了实现负载均衡、提升服务器端的数据处理能力(横向扩展)、提高故障恢复能力以及保证服务质量等目的,NoSQL数据库采用了数据分布技术。在NoSQL中,分片(sharding)与复制(replication)是数据分布的两个基本途径。其中,复制机制又可以分为主从复制和对等复制两种,如图2-2所示。
图2-2 NoSQL数据分布的两个基本途径
(3)数据一致性。在数据一致性处理方面,关系数据库和NoSQL数据库的实现方式不同。数据一致性是指用户读取的数据是否为正确数据。从数据分布,尤其是主从复制和对等复制技术可以看出,NoSQL中容易产生数据不一致性的问题。以主从复制机制为例,如果用户U1更新了主节点中的数据对象x,但主节点尚未将数据更新情况通知从节点b,用户U2从从节点b中的副本读取数据对象时,读取结果为错误数据,即存在数据不一致现象,如图2-3所示。
图2-3 数据不一致现象
关系数据库通过强一致性来确保数据一致性。强一致性要求无论更新操作是在哪一个副本上执行的,其后所有的读操作都要能获得最新的数据。与关系数据库不同的是,NoSQL数据库对数据一致性问题的认识出现了新的变化,并提出了多种一致性的观点,主要体现在3个方面:一是提出了弱一致性和最终一致性;二是针对不同一致性问题提出了不同的解决方案,如更新一致性、读写一致性和会话一致性;三是提出了CAP理论和BASE原则,放宽了对一致性的严格约束;四是采用有条件的事务机制和版本戳等方法解决NoSQL中的数据一致性问题。
(4)CAP理论与BASE原则。NoSQL数据库对数据管理的目的,尤其是数据一致性保障问题的认识发生了变化,而这些变化以两个重要理论为依据——CAP理论与BASE原则。
(5)视图与物化视图。
•在关系数据库中,为了实现简化用户数据查询操作(尤其是跨多个表的查询)、保护部分机密字段以及提供更多的数据分析视角等目的,引入了视图技术。视图是从一个或几个基本表(或视图)导出的表。数据库只存放视图的定义,而不存放视图对应的数据内容。视图中的数据内容都是在视图被访问时临时根据对应的基本表计算出来的。因此,虽然视图属于虚表,但是,视图的访问与基本表没有差异,用户不需要区别对待视图和基本表。然而,视图技术带来的代价是增加了计算工作量。
•在关系数据库中,生成复杂的视图往往需要大量的计算工作,其时间复杂度往往很高。因此,在数据读取速度要求高且读取内容相同的应用场景,NoSQL数据库采用了另一种视图技术——物化视图。物化视图是指将视图内容预先计算好并存放在磁盘中,从而解决重复计算的时间成本。由于多数NoSQL数据库应用对查询响应时间要求很高,而且查询操作与其数据结构往往不一致,因此物化视图理念广泛应用于NoSQL数据库技术中。NoSQL数据库技术主要以MapReduce方式计算物化视图。当NoSQL数据库中需要多次使用MapReduce计算结果时,一般将其存储为物化视图,并通过增量式MapReduce操作更新物化视图,即,只需要计算视图中发生改变的那部分数据,而不需将全部数据从头计算一遍。
(6)事务与版本戳。在关系数据库中,事务(transaction)是保证数据一致性的重要手段,可以帮助用户维护数据的一致性。在NoSQL数据库中,并没有完全放弃事务理念,而是通过定义多种数据一致性目标的方式对事务特征进行分解和组合。因此,NoSQL数据库并不是无条件追求事务的4个特征,而是在前提条件(如规定延迟)下,在不同特征之间进行取舍和权衡。以数据更新的一致性为例,NoSQL数据库通常采用条件更新和版本戳的方式确保数据更新的一致性。
•条件更新。客户端执行操作时,重新读取将要更改的数据,并检测该数据在上次读取后是否一直没有变动,如果没有变动,则读取该数据。除了条件更新之外,有些NoSQL技术还采用CAS(Compare And Set)操作,通过直接比较被修改内容本身的方法来判断数据从读取到更新的时间内是否被其他人修改过。
•版本戳。它是一个字段,常用于条件更新中,每当记录中的底层数据改变时,其版本戳值也随之变化。在读取数据时可以记下版本戳,并在写入数据之前,先检查数据的版本戳是否有变化。
目前,典型的NoSQL产品有Danga Interactive的Memcached、10gen的MongoDB、Facebook的Cassandra、Google的Bigtable及其开源系统HBase、Amazon的Dynamo、Apache的Tokyo Cabinet、CouchDB和Redis等。
此外,关系云也是关系数据库在云计算环境下的另一个发展方向。关系云是在云计算环境中部署和虚拟化的关系数据库,进而使传统关系数据库具备云计算的弹性计算、虚拟化、按需服务和高经济性等特征。关系云代表了数据管理的一个重要发展方向,其关键在于实现事务处理、弹性计算和负载均衡等。关系云的一个重要功能是提供“数据库即服务”(Database as a Service,DaaS)。目前,较有代表性的云数据库类产品如表2-3所示。
表2-3 典型云数据库产品