分布式数据库HBase案例教程
上QQ阅读APP看书,第一时间看更新

1.2.1 NoSQL概述

当前数据库主要分为关系型数据库和非关系型数据库两类。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及表之间的联系所组成的一个数据组织,其事务必须具备ACID特性。而非关系型数据库的基本需求就是支持分布式存储,也就是具备CAP理论。

NoSQL数据库是非关系型数据存储的广义定义,它不同于符合ACID理论的关系型数据库,数据存储不需要固定的表结构,通常也不存在连接操作。NoSQL数据库不使用传统的关系数据库模型,而是使用键值存储数据库、列存储数据库、文档型数据库、图形数据库等方式来存储数据。

1. NoSQL共同特征

NoSQL的共同特征有以下几点:

(1)无需预定义模式:不需要事先定义数据模式及表结构。数据中的每条记录都可能有不同的属性和格式。当插入数据时,并不需要预先定义它们的模式。

(2)无共享架构:架构中的每一个节点都是独立、自给的,而且整个系统中没有单点竞争。存储数据时,将数据划分后存储在各个本地服务器上,从本地磁盘读取数据,其性能往往好于通过网络传输读取数据的性能,从而提高了系统的性能。

(3)弹性可扩展:可以在系统运行的时候,动态增加或者删除节点。不需要停机维护,数据可以自动迁移。

(4)分区:相对于将数据存放于同一个节点,NoSQL数据库需要将数据进行分区,将记录分散在多个节点上,并且通常在分区的同时还要做复制。这样既提高了并行性能,又能保证没有单点失效的问题。

(5)异步复制:和RAID存储系统不同的是,NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽可能快地写入一个节点,而不会由于网络传输引起延迟。缺点是并不总是能保证一致性,这样的方式在出现故障的时候,可能会丢失少量的数据。

(6)BASE基础:相对于事务严格的ACID特性,NoSQL数据库保证的是BASE特性。

2. NoSQL的数据特性

前文提到,NoSQL数据库保证的数据特性是BASE特性,而不是ACID特性。要解释NoSQL数据库的BASE思想,首先要对ACID有一个了解,因为BASE是相对于DBMS中的ACID所提出来的新思想。ACID指的是传统数据库对于数据特性的要求,含义如下:

· 原子性(atomicity):即事务执行作为原子,不可再分离,整个语句要么执行,要么不执行,不可能停在中间某个环节。

· 一致性(consistency):在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。

· 隔离性(isolation):两个事务的执行互不干扰,也不会发生交互,一个事务不可能看到其他事务运行时某一时刻的数据。

· 持久性(durability):在事务完成以后,该事务对数据库所做的更改便持久地保存在数据库之中,并不会被回滚。

BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网分布式系统实践的总结,是基于CAP定律逐步演化而来的。

CAP解释为一致性、可用性(availability)和分区容忍性(partition tolerance),具体含义如下:

· 一致性:一个数据系统如何处理读写操作的一致性问题。分布式系统对于一致性的要求为当更新写入操作完成时,其余读取操作需要及时看到数据的更新。

· 可用性:一个系统能够持续不间断使用的问题。严格定义上的高性能可用性,意味着一个系统从设计到实施都能够提供可持续的操作。

· 分区容忍性:一个系统在提供持续性操作时分区处理的能力。一旦开始将数据和逻辑分布在不同的节点上,就有形成分区的风险。假定网线被切断,就形成分区,在不同分区的节点A和节点B无法通信。由于Web提供的这种分布式能力,临时的分区是一个常见的情况,处理这种情况就属于分区容忍性。

传统ACID模式对于数据的属性要求非常高,在分布式系统中比较难以达到。所以在CAP理论的基础上,提出了BASE思想,对一致性进行概化处理。其核心思想是即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

BASE基础的具体含义如下:

· 基本可用(Basically Available):NoSQL允许分布式系统在某些部分出现故障的情况下,系统的其余部分依然可用。它不会像ACID那样,在系统出现故障时,进行强制拒绝,允许继续部分访问。

· 软状态(Soft State):NoSQL在数据处理过程中,允许这个过程,存在数据状态暂时不一致的情况。但经过纠错处理,数据最终会一致。

· 最终一致性(Eventually Consistent):NoSQL的软状态允许数据处理过程的暂时不一致,但是最终处理结果将是一致的,说明NoSQL对数据处理过程可以有短暂的时间间隔,也允许分更细的一个一个的处理,最后数据达到一致即可。这在互联网上进行分布式应用时具有明显的优势。

BASE和ACID的优缺点对比如下:

· BASE:弱一致,仅需要针对性数据;可用性第一位,一般注重,较为激进,注重可用性,更简单、更快、更具有扩展性。

· ACID:高度一致,高度分割化,着重于“提交”,网状事务,弱可用性,较保守,扩展性不强。