AntDB 存储技术——Hash分片技术

单台机器很难处理海量的数据或者很高的并发查询,需要把数据拆分到多个节点上,在多个节点上进行存储和处理,这种技术叫作数据分区,也称为数据分片。数据分片的主要目的是提高可扩展性,使数据分散到多个节点上,如果对单个分区进行查询,每个节点都只对自己所在的节点进行独立查询。

分布式存储系统需要解决的两个最主要的问题:数据分片和数据冗余, 通过图 3-3 来解释其概念和区别。

图 3-3 中,数据集 A、B 属于数据分片,原始数据被拆分成三个正交子集分布在三个 DN 节点上。而数据集 C 属于数据冗余,同一份完整的数据在三个节点都有存储。

AntDB 存储技术——Hash分片技术_第1张图片

图 3-3 数据分片及数据冗余示意图

AntDB 提供 Hash 分片、Mod 取模分片、Random 随机分片及复制表等多种分片方式。下面重点描述 Hash 分片技术。哈希表(散列表)是最常见的数 据结构,根据记录的关键值将记录映射到表中的一个槽(slot)中,便于快速访问。绝大多数编程语言都支持 Hash 表,如 Python 中的 dict,C++ 中的 map,Java 中的 Hashtable,Lua 中的 table,等等。在 Hash 表中,最为简单的散列函数是mod N(N 为 DN 节点的个数)。即首先由关键值计算出 Hash 值(这里是一个整型),通过对 N 取余,余数即是在表中的位置。

AntDB 数据分片的 Hash 技术也是基于这个思想,即按照数据的某一特征(key)来计算哈希值,并将哈希值与系统中的节点建立映射关系,从而将哈希值不同的数据分布到不同的节点上。

示例如图 3-4 所示。假如选择 id 作为数据分片的 key,那么各个节点负责的数据如下:

AntDB 存储技术——Hash分片技术_第2张图片

图 3-4 Hash 分片数据分布示意图
 

AntDB 存储技术——Hash分片技术_第3张图片

AntDB 存储技术——Hash分片技术_第4张图片

AntDB 存储技术——Hash分片技术_第5张图片

由此可见,按照 Hash 方式做数据分片,映射关系非常简单,需要管理的元数据也非常少,只需要记录节点的数目以及 Hash 方式就可以了。

但 Hash 分片方式的缺点也非常明显:当加入或者删除一个节点的时候, 大量的数据需要移动。比如在某处增加一个 DN4_1 数据节点且 DN4_1 数据节点也想共同存储 test 表数据,那么 N(DN 节点的个数)由 3 变成 4 了,原本的 mod 3 就需要变成 mod 4,test 表数据需要移动。因此,当前 AntDB 新增加数据节点的情况下,原本表的分布节点不会主动发生变化。在 AntDB 数据库中, 为了减少迁移的数据量,在线热扩容技术里节点的数目均是成倍增长,这样最多有 50% 的数据发生迁移。

Hash 方式还有一个缺点,即很难解决数据不均衡的问题。有两种情况:第一,原始数据的特征值分布不均匀,导致大量的数据集中到一个物理节点上; 第二,对于可修改的记录数据,单条记录的数据变大。这两种情况,都会导致节点之间的负载不均衡,而且在 Hash 方式下很难解决。对于此场景,AntDB 提供 random 随机分片方式可以解决该类数据倾斜的问题。

你可能感兴趣的:(AntDB,国产数据库,antdb,antdb数据库,数据库)