NoSQL的出现背景:
随着互联网的发展,数据量激增,传统的集中式关系型数据库已经无法满足互联网海量数据的存储及使用需求。代表事例:12306订票系统上线后的前几年,每逢节假日必挂,统计显示春运期间每日逾2000万人访问,日点击量峰值达14亿次。
NoSQL要解决的核心问题:海量数据存储和处理速度响应。表现上,NoSQL是对响应速度”斤斤计较,分秒必争”的一类技术。
NoSQL定义:主体符合非关系型、分布式、开源和具有横向扩展能力的下一代数据库。
相关概念:
(1)时间单位:
符号 | 名称 | 应用举例 |
---|---|---|
s | 秒 | 互联网打开一个网页耗时应控制在3秒以内,否则就会明显影响体验。 |
ms | 毫秒 | 从机械硬盘完成一次简单读写数据的时间在几毫秒到几十毫秒之间。 |
μs | 微秒 | 从固态硬盘完成一次简单读写数据的时间在几毫秒到几十微秒之间。 |
ns | 纳秒 | 现代CPU一条机器指令的执行时间在几纳秒到几十纳秒之间。 |
(2)存储单位:
符号 | 名称 | 应用举例 |
---|---|---|
B | Byte(字节) | 一个ASCII字符 |
KB | Kilo Byte(千字节) | 一张1英寸彩色照片的大小为几KB到几百KB。 |
MB | Mega Byte(兆字节) | 一集连续剧大约几百MB。 |
GB | Giga Byte(吉字节) | 一部高清电影约几GB到几十GB。 |
TB | Tera Byte(太字节) | 阿里电商平台2014年日增交易数据50TB左右。 |
PB | Peta Byte(拍字节) | 2014年阿里平台累计数据超过100PB。 |
EB | Exa Byte(艾字节) | 2014年中国数据总量达909EB,占世界13%。 |
ZB | Zetta Byte(泽字节) | 2014年全世界数据总量6ZB多。 |
YB | Yotta Byte(尧字节) | 相当于7000个人体内微细胞总和。 |
BB | Bronto Byte(珀字节) | 差不多可以用来对地球所有事物进行记录。 |
NB | Nona Byte(诺字节) | 承载太阳系级别的数据记录。 |
DB | Dogga Byte(刀字节) | 承载银河系级别的数据记录。 |
CB | Corydon Byte(靠字节) | 承载星系团级别的数据记录。 |
XB | Xero Byte(日字节) | 承载宇宙级别的数据记录。 |
以上相邻单位间换算比例均为2^10=1024。(摘自《NoSQL数据库入门与实践》)
(3)大数据:高速、巨量且(或)多变的数据。
数据库可以分为三大类:TRDB、NoSQL和NewSQL。
TRDB,即Traditional Relational Database,指传统关系型数据库。TRDB设计初始基于单机集中式管理数据理念,所以受单机物理性能限制明显。当数据量增远远超出单机处理极限后,传统关系型数据库的扩展就成了一个大问题。在这种情况下,再开发和系统维护也将面临很多问题。
总结TRDB的特点如下:
--强存储模式:表、行、字段需严格定义,并进行相关属性约束。
--支持标准SQL操作
--强事务保证高可用性和安全性
--(主要)单机集中式处理
代表产品:Oracle、DB2、MySQL、SQLServer等。
从数据存储结构原理的角度,一般将NoSQL分为5种:键值存储、文档存储、列族存储、图存储和其他存储。
总结NoSQL特点如下:
--弱存储模式:表、行、字段往往不需定义,无强制性检查。大大提高了存储速度。
--不采用SQL标准:这将带来可移植性相对较低的问题。
--弱事务或无事务机制
--(主要)分布式处理
代表产品:MongoDB、Redis、HBase、Cassandra等。
NewSQL是最近几年才出现的一种新数据库技术。目的是结合传统关系型数据库和NoSQL技术的优点。
总结NewSQL特点:
--快速、有效的大数据处理能力
--标准SQL
--强事务处理机制
热门产品:PostgreSQL、SequoiaDB、SAPHANA、MariaDB、VoltDB、Clustrix等。
代表产品:MongoDB、Redis、HBase、Cassandra等。
单机局限性:
--单机读写数据速度存在瓶颈:数据读写速度受单机不同硬件配置组合的影响,而机构硬盘是影响数据读写数据的一个重要短板。
--单机存储数据容量瓶颈
--单机指令之间速度的细微区别:NoSQL采用的指令体系(语言)往往比TRDB要更为底层,执行效率更低;此外即使使用相同的语言,但NoSQL采用的命令往往更高效,这是因为NoSQL本身存在的目的之一,就是追求极致的效率。
物理扩展:
--纵向扩展:两个方法,一个是提高物理单机配置,即PC=>小型机=>大型机,问题是成本高昂;另一个方法是实现基于内存的处理,解决的是硬盘写速度瓶颈问题,但是却加剧了内存瓶颈的问题。
--横向扩展:单机=>多机,主要技术是多服务器集群。这在一定数据量范围内解决了单机局限性。
TRDB读写数据的最小单位是行,而NoSQL读写的最小单位是一行中的某个指定字段,因而读写效率要比TRDB要高。但是NoSQL这种弱强制性特点也是有代价的。其代价是需要通过业务层代码来约束数据,从而保证数据质量。
分布式处理面向的是多服务器情况,为保证数据的顺利处理,应实现:
2.2.1.分布式管理不同服务器
为了实现所有服务器上的可靠通信,不少NoSQL建立了基于主(Master)/从(Slave)服务的分布式软件系统。每台Master和Slave都基于一台服务器,是物理节点(Node)。Master主要承担客户请求处理、给不同的Slave分配数据处理任务、并负责所有Slave的协调一致等任务,如Slave注册。而Slave则主要负责接收传送到本地的数据、数据的存储和计算,并把结果返回给调用者。
帽子定理(CAP Theorem)
指分布式系统在网络故障情况下,只能同时满足用户以下三个期望需求中的两个:
一致性(Consistency):指同一时刻,任何一个终端客户在每个节点都能读到最新写入的数据。
可用性(Availability):指一个运行节点在合理的时间内总能响应更新请求,不会出错或超时。
分区容错性(Partition Tolerance):指网络故障时,系统仍能继续保持响应客户请求的能力。
2.2.2.完整的出错自适应
网络故障不可避免,多服务器系统必须思考和解决的一个问题,是如何实现出错的自适应以快速解决问题。
2.2.3.分布式性能监管
大规模服务器下,系统的性能将直接影响客户对系统需求的满足程度。因而性能问题必须被及早发现并有效解决,而这就是分布式性能监管的意义所在了。
传统数据库的事务处理机制,满足了传统事务特性(ACID):
--原子性(Atomicity):事务不可分割
--一致性(Consistency):事务使数据库从一个状态变到另一个状态,不存在中间状态
--隔离性(Isolation):一个事务的执行不被其他事务干扰
--持久性(Durability):事务一旦提交,其对数据库中数据的改变是永久性的。
事务的ACID特性,提出的目的,是保证结构化数据存储的严谨性和约束性。本质上是严格保障了数据的质量。但是在大数据背景下面临的,往往是非结构性很强的数据,以及一定程度的数据出错容忍度。在这种情况下,NoSQL提出了自己的处理机制。
BASE机制:
--基本可用(Basically Available):允许分布式系统中某些部分出现故障,系统的其他部分依然继续运行。
--软状态(Soft State):在数据处理的过程中,允许存在数据暂时不一致的情况。
--最终一致性(Eventually Consistent):虽然允许过程中数据暂时不一致,但是最终处理结果必须是一致的。
NoSQL没有类似TRDB的SQL一样的标准化语言,这不但会大大削减NoSQL程序的可移植性,也给技术人员的学习带来了不小负担。
TRDB技术下的分析技术虽然也比较完善,但是受限于数据规模,并不适合处理大数据分析的问题。而专门针对大数据分析的技术生态,近年来发展也很快,其中一些已经相当完善,如Hadoop。
相对TRDB,在NoSQL下进行数据分析,有两方面优势:
--技术优势:可以基于原始代码开发;基于高级产品技术的开发
--成本优势:开源软件降低了成本