《大数据导论》读书笔记——Chapter 5

全书一共8章,前面4章为第一部分,讲述大数据基础,后面4章为第二部分,内容为大数据的存储和分析,第5、6章关于大数据存储与分析处理的相关概念,第7、8章讲述大数据存储与分析的相关技术。第5章的大标题是大数据存储的概念,内容包括集群、分布式文件系统、NoSQL、分片、复制以及CAP定理、ACID原理、BASE原理三个数据库设计原则。

1. Clusters

一个cluster是指多个server或多个node的集合,这些server或node有着相同的硬件标准并通过网络相连,构成一个单元。每个server或node有专属的资源,如内存、处理器、硬件等。Cluster可以将任务分解并分配给不同的server或node。

2. File System and Distributed File System

文件系统(File System)是指在存储介质中存储和组织数据的方式,提供数据存储的逻辑视图和结构。操作系统通过file system来为应用程序提供或存储数据,一个操作系统中可有一个或多个file system,例如windows中的NTFS和Linux中的ext。

而分布式文件系统(Distributed File System)是指能够将较大的文件分布存储在一个cluster的多个node上,并且多个node可以有不同的地理位置,例如Google File System(GFS)和Hadoop Distributed File System(HDFS)。

3. NoSQL

NoSQL数据库泛指非关系型数据库,通常有着可升级性、容错性,是为存储半结构化和非结构化数据而设计的。

NoSQL数据库可提供基于API的查询接口,被应用程序所调用,也可提供类SQL查询接口,例如存储RDF数据的NoSQL数据库可提供SPARQL查询

百度百科中,NoSQL数据库的四大分类如下:

https://baike.baidu.com/item/NoSQL/8828247?fr=aladdin

4. Sharding

Sharding是指将一个较大的数据集划分为一系列较小的数据集的过程,而这些较小的数据集被叫做shards,中文翻译为“分片”。每一个分片可以存储在一个node中,有着相同的结构。

这样,每个node只负责提供一部分数据集的读写服务,大大降低了读写操作所需的时间,提高了数据读写效率。同时,分片存储可以增加数据存储的容错性,当一个node故障时,其他node不会受影响。但分片可能会影响查询性能,因为查询可能需要遍历每个node,此时,可根据data locality,将相关数据存储在同一分片中。所谓的“数据局部性(data locality)”包括两方面的含义:

1)刚刚被访问过的元素,极有可能在不久之后再次被访问到;

2)将被访问的下一个元素,极有可能就处于之前被访问过的某个元素的附近。

5. Replication

Replication是指将数据集的多个副本(replicas)存储在不同的node中,可提高系统的容错性。Replication的方式有两种:master-slave和peer-to-peer。

1)Master-Slave

主从replication方式,所有的数据写入操作,包括增删改,在master node(主节点)中进行,数据被保存后,将被复制到slave node(从节点)中,所有的读操作在slave node(从节点)中进行。

Master-slave方式适用于数据读取密集型应用场景,可通过增加从节点数来提升系统性能,但当写入数据量增加时,系统性能将受到影响。

当主节点故障时,从节点仍可用,数据仍可读取。此时,可将其中某一从节点配置为主节点的备份节点,来替代故障中的主节点提供数据的增删改服务。

对于master-slave方式,还需考虑数据的一致性,例如以下场景中:

User A更新了id=1的数据,数据在主节点更新后被依次复制到从节点A和B,在从节点A中完成了复制,在从节点B中的复制尚未进行,此时,User B正在从节点B中读取尚未被更新的id=1数据,会造成数据的不一致性。书中提到可通过voting system来解决这类问题,也就是说,当不一致性发生时,遵从多数的从节点中所存储的那个数据版本,这里有个疑问,如果完成数据复制操作的从节点恰好是少数部分,那么这个voting system得出的结果会不会出错?搜索了voting system相关的网页,没有找到这个问题的答案。。

2)Peer-to-Peer

Peer-to-Peer replication,是指所有的node(节点)均被设置为同一个level,没有主从之分,每一个节点都可完成数据读写操作,每一次数据的写操作都被更新到所有的节点中。

同样的,数据写操作在不同节点之间更新的过程中,会存在数据不一致的问题,可通过主动或被动的并发策略来解决。

在主动并发策略中,会用到一个lock机制,也就是说,当lock生效时,不允许进行数据更新。在被动并发策略中,没有lock,允许数据暂时的不一致性,因为它们终将会变得一致。。(这真心很被动。。好吧,有耐心是一种美德。。)

6. Sharding and Replication

前面分别说了Sharding和Replication,对于sharding在容错方面的局限性,书中提到可将Sharding与Replication结合来解决这个问题,两种方式:sharding and master-slave replication和sharding and peer-to-peer replication。

1)Combining Sharding and Master-Slave Replication

主从分片复制方式,一个主分片可有多个从分片,而一个从分片只能有一个它所对应的主分片。

图中是一种主从分片复制方式的应用场景,每个节点均包含主分片和从分片,id=2的数据写操作在节点A中进行,因为id=2数据相关的主分片在节点A中。写操作完成后,id=2数据会被更新到节点B,也就是相对应的从分片。而对于id=4数据的读操作,则可在节点B或节点C中的任意一个节点完成。

2)Combining Sharding and Peer-to-Peer Replication

对等分片复制方式,每个分片负责存储数据集的一部分,每一次数据更新都被复制到同级的多个分片中。

图中是一种对等分片复制方式的应用场景,每个节点包含两个不同的分片,当id=3的数据进行写操作时,写操作在节点A中完成并被更新至节点C。id=6数据的读操作可在节点B或C中的任意一个节点完成。

7. CAP Theorem

书中从这里开始,依次介绍了CAP、ACID和BASE,对于CAP,用了theorem这个词,而对于后两者,用的是principle。查了一下两个词的区别,theorem多指经过推理或演算能得到证明的原理、定理或定律;而principle大多是一个具有普遍意义的基本规律。也就是说,CAP原理最初是一个命题,是被证明之后得出的结论。

CAP分别代表Consistency、Availability和Partition tolerance,即一致性、可用性和分区耐受性,分别代表与分布式数据存储系统相关的三个限定,强调一个分布式数据存储系统对于CAP,只能进行三选二,三者都满足的情况不存在,真是人生处处皆选择。。如下图:

Consistency(一致性):

对于任何节点相同数据的读取结果一致。

Availability(可用性):

读写操作均被响应,无论是成功的结果返回还是失败的消息回复。

Partition tolerance(分区耐受性):

数据存储系统可被分为多个分区,并能正常提供数据读写服务。

CAP只能进行三选二,原因分析如下:

1)当C与A同时满足时,需要保证数据的一致性和可用性,就势必要放弃分区,因为分区会造成数据不一致或不可用,两者一定会有一种情况发生。选CA放弃P,就放弃了分布式,故对于分布式数据存储系统,只需要在CP与AP两者之间选择;

2)当C与P同时满足时,需要在分布式系统中确保数据一致性,例如前文提到的主动并发策略中的通过lock机制来确保数据一致性,则会有某些时间段,当lock生效时,数据不可用,A无法满足;

3)当A和P同时满足时,数据一致性无法满足,因为在分布式数据存储系统中,对于某一节点的数据更新操作需要同步到其他节点,在这个过程中,数据是不一致的。

8. ACID

ACID是一种关于事务管理的数据库设计原理,即Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。在数据存储系统中,一个事务是指由一系列数据操作组成的一个完整的逻辑过程,而这个过程具有ACID的特征。

1)Atomicity(原子性)

是指一个事务操作要么全部成功,要么彻底失败,不存在中间状态。

如图中所示,用户需要对三条数据进行更新操作,其中两条数据的更新顺利完成,而第三条出错,结果是数据库将rollback到之前的状态,也就是说,一个操作没有部分完成的状态,只有完全成功或失败。

2)Consistency(一致性)

这里的一致性与CAP定理中的一致性涵义不同,ACID中的一致性是指只有满足数据库中数据一致性限定的数据才能够被成功写入数据库(有点拗口。。),如下图:

比较容易理解的一个例子,数据格式要求是float型,对于varchar型的数据拒绝写入。

3)Isolation(隔离性)

是指事务操作的结果在其完成之前对其他操作不可见。还是用例子来解释:

用户A要对两条数据进行更新操作,当其中id=2的数据已完成更新而id=3的数据未完成更新时,用户B对id=3的数据不可进行更新操作。在用户A的操作未完成时,系统对id=3的数据进行锁定。

4)Durability(持久性)

事务操作的结果是持久的,也就是说,一个操作完成后,无论发生何种形式的系统错误,其结果都不会被rolled back,例子如下:

用户完成对id=2数据的更新后,系统掉电,当系统再次上电后,id=2数据更新操作的结果不会被影响。

9. BASE

BASE是基于CAP定理的数据库设计原理,适用于采用分布式技术的数据存储系统。BASE分别表示Basically Available(基本可用)、Soft state(软状态)和Eventual consistency(最终一致性)。当一个数据存储系统满足BASE原理时,实际上是放弃了强一致性而选择了可用性,也就是选择了CAP中的AP。

1)Basically Available(基本可用)

是指分布式数据存储系统在出现不可预知的故障时,需要确保基本可用,对于用户的请求,系统需要作出响应,无论是成功的结果还是失败的回复。

2)Soft state(软状态)

软状态意味着数据库可以存在数据不一致的状态,但最终会达到一致。

3)Eventual consistency(最终一致性)

是说系统中存储的数据最终会达到一致,允许存在软状态,不需要保证实时的强一致性。

后记:

单身狗单身到了狗年,春节期间不打烊,在与家人团聚的同时,继续啃第6章,预祝这里的朋友们春节快乐,请等更新。

END

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180210G0JIM600?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券