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

news/2024/7/2 9:01:14

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

分布式存储系统需要解决的两个最主要的问题:数据分片和数据冗余, 通过图 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 随机分片方式可以解决该类数据倾斜的问题。


http://lihuaxi.xjx100.cn/news/1237395.html

相关文章

【Spring学习之更简单的读取和存储Bean对象】教会你使用五大类注解和方法注解去存储 Bean 对象

前言: 💞💞今天我们依然是学习Spring,这里我们会更加了解Spring的知识,知道Spring是怎么更加简单的读取和存储Bean对象的。也会让大家对Spring更加了解。 💟💟前路漫漫,希望大家坚持…

mybatis-plus入门笔记

快速开始demo 创建数据库 DROP TABLE IF EXISTS user;CREATE TABLE user (id BIGINT(20) NOT NULL COMMENT 主键ID,name VARCHAR(30) NULL DEFAULT NULL COMMENT 姓名,age INT(11) NULL DEFAULT NULL COMMENT 年龄,email VARCHAR(50) NULL DEFAULT NULL COMMENT 邮箱,PRIMARY K…

原点安全携“金融机构消费者个人信息保护解决方案”亮相 2023 中国金融数字化转型发展大会

6 月 7 日,由中国金融电子化集团有限公司、南京市建邺区人民政府、中国人民银行南京分行主办,主题为“数驱转型 智创未来”的「2023 中国金融数字化转型发展大会暨第十三届中国城市商业银行信息化发展创新座谈会」于南京国际博览中心隆重召开。 本次会议…

Kafka详解(二)

Kafka命令行操作 [aahadoop102 ~]$ cd /opt/module/kafka/bin/ [aahadoop102 bin]$ ll 可以看到自带了zookeeper主题命令行操作 查看操作主题命令需要的参数 [aahadoop102 kafka]$ bin/kafka-topics.sh重要的参数如下查看当前服务器中的所有topic [aahadoop102 kafka]$ bin…

大数据分析平台释疑专用帖

大数据分析平台是大数据时代,企业数字化运营决策的一大关键平台,但初次接触大数据分析平台时,大家必然是问题多多的,本文将就几个比较常见的问题进行总结回答,希望对正在了解、选型大数据分析平台的大家有所帮助。 首…

每日一练 | 华为认证真题练习Day57

1、两台路由器通过PPP链路互连,管理员在两台路由器上配置了OSPF,且运行在同一个区域中,如果它们的Router ID相同,则下面描述正确的()。 A. 两台路由器将会建立正常的完全邻居关系 B. 两台路由器将不会互相…

外卖项目初始化01

sell-app-day01 项目的搭建 创建项目仓库(把代码上传上去,切换个人分支)工程化scss reset.scssmain.scss [统一的出口]common.scss [公共的样式]vant.scss [覆盖vant的样式]var.scss 【变量的文件, 新】 css3 的变量 一键切换皮肤…

Jenkins部署报错问题:已解决

一.Jenkins不能下载插件 报错sun.security.provider.certpath.SunCertPathBuilderException sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetat sun.security.provider.certpath.SunCertPathBuild…