暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

北陌 2023-11-14
68

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

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

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


图 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,那么各个节点负责的数据如下:


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




由此可见,按照 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数据库始于2008年,在运营商的核心系统上,为全国24个省份的10亿多用户提供在线服务,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行近十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论