大数据日知录理解(1)

一、系统拓展性

提高系统拓展性主要分为两种:一种为增加单机数量;一种为提高单机硬件资源配置。我们接触的大多数大数据存储与计算系统一般采用第一种方式来提高拓展性。

二、数据分片与数据复制

数据分片: 之前在Hadoop的学习中也涉及到这个概念,目的是把数据切分;在Hadoop中有一个block块的概念,Hadoop2.7.3中把一个block块设置为128m,如果处理一个文件,这个文件大于128m,它就会被分成多个block块,并分配给多个机器进行操作,实现系统的水平拓展。
**数据复制:**主要通过数据复制来保证数据的高可用性,将数据复制多份,防止一个机器宕机后造成数据丢失,同时,数据复制还可以增加读操作的效率,客户端可以从多个备份数据中选择物理距离较近的进行读取,既增加了读操作的并发性又可以提高单次读的读取效率。
下面是数据分片与数据复制的关系。
大数据日知录理解(1)_第1张图片

三、哈希分片

哈希分片有三种方法:Round Robin,虚拟桶以及一致性哈希方法。
1.Round Robin
俗称的哈希取模法,假如有K台机器,对物理机进行编号从0到K-1,根据哈希函数,对于以key为主键的某个记录,H(key)的数值即是存储该数据的物理机编号,通过这种方式,就将全部数据分配到K台物理机上,在查找某条记录时,也使用同样的哈希函数就可以找到存储相应信息的物理机。但是这种方法缺乏灵活性,如果增加或者减少物理机,映射关系就会全部打乱,需要重新分配。
2.虚拟桶
虚拟桶方法是在索引key和存储节点之间放置一层中间的table,这个table就叫做虚拟桶。他的原理大致是这样的:

keys —- vBuckets —– node (server)

在vBuckts和Node之间,是通过查询table的方式来实现的。
依然是多对一的关系,多个虚拟桶可以指向同一个物理节点。这一部分不是通过Hash函数来映射的,对应关系存储到table中,需要找到是路由到哪台节点上,可以通过查询表来找到,这个表是存储在内存中的,效率比较高。
这样做的好处就是,实现了索引key和存储节点之间映射关系的解耦,如果有新的节点增加神马的,只需要修改内存表就可以了,用不着修改哈希函数。
3.一致性哈希:
一致性性哈希算法要比上述两种算法复杂得多,其核心技术是DHT,就是分布式哈希表,且一致性哈希算法也不唯一,在每台机器上存储一部分的哈希数据。
哈希空间是一个首尾相接的环状序列,把集群中的每台节点的IP和端口号通过哈希函数映射到这个收尾相接的环中,每个节点在环中的位置一定是唯一的。每个节点记录好他的前驱结点和后继结点,那么宏观上来看,这个数据结构就形成了环状。
每台节点存储这个环中从的一部分数据,例如从本节点到下一个节点这区间的数据归这个节点来存储。
在寻找数据的时候,请求客户端向这个分布式哈希集群中的任意一台节点请求数据,节点如果认为这条key在他的管辖范围内,就进行解析,如果不在他的范围内,就扔给自己的后继结点。
实际上,这只是一种最简单的情况,在实际中这样做效率比较差,还有一种叫做一致性哈希路由算法的东西,实现起来也比较复杂,一般也没有必要去自己实现。

四、范围分片

此处没有看懂,po出原文
范围分片首先将所有记录的主键进行排序,然后在排好序的主键空间里将记录划分成数据分片.每个数据分片存储有序的主键空间片段内的所有记录。在实现具体存储系统时,往往保持一个数据分片的映射表,记录表每- -项记载数据分片的最小主键及其对应的物理机地址(如图1-9 所示)。在对记录/增/删/改时,查找映射表就可以找到对应存储这个记录所在数据分片的物理机,至于数据分片在物理机的管理方式往往采用LSM树,这是一种高效写入的数据索引结构,其细节可以参考第3章相关内容。
大数据日知录理解(1)_第2张图片
很多大规模存储系统都支持上述范围分片模式,比如Yahoo的PNUTS和微软的Azure。Google的BigTable也基本遵循上述模式,不同点在于其数据分片映射表不是单层结构,而是组织成类似B+树的层次结构,这样可容纳的数据分片个数获得极大的提升,其具体细节可参照第10章列式数据库10.1节“BigTable" 介绍内容中的元数据管理部分进行对比了解。
与通用数据分片和路由模型对照,范围分片对应的key-partition映射表是通过记录主键排序切割获得的,而partition-machine映射表则是通过直接保持其对应关系来实现的。

你可能感兴趣的:(大数据日知录理解(1))