一种关于存储分片扩展的方案
2014-04-29白帆
白帆
摘 要 数据库的扩展是分布式存储的关键技术,本文对sharding技术的适用环境进行了研究,介绍了一种基于存储分片技术对于数据库系统扩展能力的提升方法。
关键词 分布式 存储 分片 扩展
中图分类号:TP311.13 文献标识码:A
0引言
如何提升数据库的扩展能力一直是数据库技术的核心问题,随着互联网高速发展,商业数据库软件对数据库的自动扩展能力显示出不适应的情况,暴露出一些不足之处,本文结合sharding碎片技术,对该技术适合的应用领域进行分析研究,提出了一种存储分片扩展的新方案,改进分布式数据库存储管理,提升扩展能力。
1 分片技术介绍
1.1 sharding 的定义
shard即“碎片”,sharding也称作数据切分或分区。是指通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。
1.2 常见的sharding切分算法
hash切分
hash放置是以每条数据的一个域或者多个域(一般都选择主键或者unique键)作为划分键K,假设总共的节点数量为N (1-N), 那么数据被分配到的节点编号为:
n = hash(k) mod N
hash划分实现非常简单,只要所采用的哈希函数能把值算的足够均匀,那么数据将会很均匀的被切分到各个节点,而且几乎不需要元数据就可以进行查询的路由。但是,hash切分也存在很明显的两个缺点:
(1)实用性较差,由于划分键的值被hash化,生成一个与输入分布无关、输出均匀的值,所以每个节点内数据之间并没有什么逻辑相关性,关联数据集中性差,这样不能高效的支持一些具有范围性或分类性的服务,比如区域性服务、以时间范围为约束的服务等。
(2)扩展能力差 ,由于最终位置n是依賴N(节点总数)的值,因此一旦N发生变化,将导致n的数值变化,也就是说一旦加入新的机器,老节点里的数据可能大部分都要进行迁移,这样的开销太大。
2 分片存储的新方案
区间划分(Range-based Partitioning)首先会把数据按某种数值(时间,区域等)分为多个区间,然后再将这些区间分配到系统的各个节点上面。最简单的区间划分是一个节点只持有一个区间,在有n个节点的情况下,将划分键的取值区间均匀划分(这里的均匀是指划分后的每个partition的数据量尽可能一样大,而并非值域区间一样大)为n份,然后每个节点持有一块。
例如,按照用户名称首字母进行划分,可能有以下的划分方案:如图-1所示,总共有4个shard。
用户名称首字母在[a-d)的会被分配到shard1节点
用户名称首字母在[d-h)的会被分配到shard2节点
用户名称首字母在[h-t)的会被分配到shard3节点
用户名称首字母在[t-z)的会被分配到shard4节点
-1 sharding区间划分图片
综上所述,区间分布比hash分布在处理分布式、大数据存储管理时具备一定的优势,主要表现在:
(1)提高了数据库的可扩展性,可以随着应用的增长来增加更多的服务器满足应用需求,只需要将新增加的数据以及负载放到新加的服务器上即可。
(2)提高了数据库的可用性。因为各节点的数据是相独立的,所以如果其中几个shard服务器down掉之后,并不会使整个系统对外停止服务。
(3)系统有更好的可管理性。对系统的升级和配置可以按照shard一个一个来做,并不会对服务产生大的影响。
直接hash划分使用价值不高,区间划分则可以得到很广泛运用,有很好的分片扩展性,大大降低了对系统的性能消耗。
3结束语
使用区间分片扩展解决的hash分片扩展的弊端,使得各节点的数据能相对均匀的迁移到新的节点上面,大大提高了I/O效率和系统稳定性,在工作实践中,我们可以适当根据数据的实际情况来对区间分布进行人为的干扰和定制,这样数据的分布和迁移能得到更好的效果。
参考文献
[1] 秦秀磊,张文博,魏峻,王伟,钟华,黄涛.云计算环境下分布式缓存技术的现状与挑战[J].软件学报,2013.1.
[2] 分布式存储系统中一致性哈希算法的研究-电脑知识与技术.学术交流,2011.8(7).