随着互联网时代,特别是移动互联网时代的到来,形形色色的企业都在将自己的系统平台快速升级迭代,以此作为向互联网转型的一个部分。 在这样的背景下,这类应用平台所依赖的数据库系统就需要支持突然增加的巨量的交易数据,但是在这种情况下,单体的数据库往往会很快的过载。而用于扩展数据库最常用的技术手段就是数据分片。
那么 1.什么是分片? 2.如何将它应用于扩展数据库? 3.常见分片架构的优缺点
分片是将大数据表分解为较小的数据表的过程,这些分片分布在多个数据库集群节点上。分片本质上可以被看作传统数据库中的分区表,是一种水平扩展手段。每个分片上包括原有的总数据集的一个小的子集,从而可以将总负载分散在各个的分区之上。
数据分片的方式一般包括两种: 1.水平分片 在不同数据库节点中存储同一表的不同行 2.垂直分片 在不同数据库节点中存储表不同的表列 分片理论其实来源于经济学边际收益的相关理论:如果投资持续增加,但收益的增幅开始下降时,被称为边际收益递减状态,而刚好要开始下降的点被称为边际平衡点。该理论应用到数据库计算能力上,往往是这样被表述的:如果数据库处理能力遇到瓶颈,最简单的方式是持续提高系统性能,比如说更换更强劲的CPU、更大的内存等,这种模式被称为垂直扩展。 当持续增加资源以提升数据库能力时,垂直扩展因为自身的限制最终会达到边际平衡,收益就开始逐步递减了。那么此时对表进行水平分片意味着可以引入更多的计算能力,来处理数据与交易,从而将边际递减再次扭转为边际递增的状态,同时通过持续水平的扩展,使所有节点上的处理和负载都比较均匀。分片模式可以获得一种1+1>2的效果,这就是集群平均处理能力大于单节点处理能力的原因。这样就使规模较小、价格便宜的服务器组成的水平扩展集群可能比维护一台大型商用服务器更具有成本的效益。
分片算法 一般代指水平分片所需要的算法 1.哈希分片 首先需要获取分片键,然后根据特定的哈希算法计算哈希值,最后使用哈希值确定数据应被放置在哪个分片中。 数据库一般对所有的数据使用统一的哈希算法,以促成哈希函数在服务器之间进行均匀的分配,从而降低数据不均衡带来的热点的风险。使用这种方法,数据不太可能放在同一个分片上,从而使数据被随机的分散开。这种算法非常适合随机读写的场景,能够很好地分散系统负载,但弊端是不利于范围扫描、查询这样的操作。 2.范围分片 根据数据值或键空间的范围对数据进行划分,相邻的分片键更有可能落入相同的分片上。每行数据不需要像哈希分片那样,需要进行转换,实际上它们只是被简单分类到不同的分片上。 范围分片需要选择合适的分片键,这些分片键应该尽可能选择不包含重复的数值,几个候选值应该尽可能离散,同时数据不要单调递增或单调递减,否则数据不能很好地分散在集群里,从而造成集群热点。 范围分片非常适合范围查找,但是其随机读写能力偏弱。
以上,我们应该注意到,哈希分片和范围分片并不是非此即彼,二选一的,我们可以更灵活地组合它们。例如,我们可以建立一个多级的分片策略,该策略上层可能会使用哈希分片,而在每个基于哈希分片的单元里面,数据将按顺序进行存储,进一步分片。
|