主要内容:
- 概述
- 抽象模型
- 哈希分片
- 范围分片
概述
目前大数据规模已达到PB级别之上,单台服务器已经无法满足该规模数据量的需求,需要采取大规模集群存储和处理这些数据。因此对于待处理的数据,需要通过数据分片切分数据并将其分配到各个机器中去,数据分片操作后,需要通过数据路由来查找某条记录存储在哪条机器中。接下来主要从数据分片与路由的抽象模型、数据分片与路由分类来详述。
抽象模型
数据分片与路由的抽象模型,可以看成一个二级映射关系。第一级key-partition
映射是将数据记录映射到数据分片,一个数据分片可以包含多条数据记录;第二级partition-machine
映射是将数据分片映射到物理机器中,一个物理机器可以包含多个数据分片。
数据分片时,根据
key-partition
映射关系将数据水平分割成数据分片,再根据partition-machine
映射关系将分片存入对应的物理机器中;数据路由时,根据
key-partition
映射关系查找到对应的数据分片,然后根据partition-machine
得出具体存储该数据的物理机器,之后从该物理机器读取值。
哈希分片
数据分片的常见手段是采取哈希函数,常见的哈希分片方式分别是:哈希取模法、虚拟桶和一致性哈希。
Round Robin
其实就是哈希取模法,假设有K台机器,对其编号从0到K-1。对于key关键字的记录,根据H(key)
哈希函数求出存储该数据的机器编号,从而实现数据分片。数据路由也使用相同的哈希函数。
H(key)=hash(key) mod K
Round Robin的优点是实现非常简单。缺点是缺乏灵活性,因为每台物理机器对应一个数据分片,抽象模型中两个映射关系都采取了同一个哈希函数,造成了集群中机器个数和哈希函数的紧耦合,因此只要机器个数发生变化,哈希函数发生变化,需要重新进行数据分片。
虚拟桶
所有记录通过哈希函数映射到虚拟桶,一个虚拟桶可以包含多条记录,这是第一层映射关系,虚拟桶其实就是数据分片;第二层映射通过查表实现,一个物理机器可容纳多个虚拟桶。
引入虚拟桶的优点在于增强了系统的扩展灵活性,一级和二级映射解耦合。当新加入机器时,只需修改数据分片-机器映射表中受影响的条目就可以实现扩展。
一致性哈希
一致性哈希是在分布式环境下,每台机器负责存储部分数据,通过哈希方式对数据进行操作的方法。一般
范围分片
所有记录根据主键进行排序,再从排序好的记录中划分数据分片,每个分片存储的是一段记录。一般会保存一个数据分片的映射表,表记录数据分片中记录的最小主键值以及对应的机器地址。
参考文章
《大数据日知录:架构与算法》