AntDB 企业增强特性介绍——AntDB在线数据扩容关键技术

news2025/2/6 19:13:37

数据库集群安装完成后,其数据存储容量是预先规划并确定的。随着时间的推移以及业务量的增加,数据库集群中的可用存储空间不断减少,面临数据存储容量扩充的需求。
传统的在线扩容的流程大致如下。
(1)在集群中加入新的 Datanode Master 节点。由于在创建 Hash 表和复制表时,将表分布的节点写入表定义(pgxc_class),因此新增 Datanode Master 节点后,新建表会使用新增节点,而之前建立的表不会使用新增节点, 从而不会影响表的访问。
(2)对于已经存在的表,调用 alter table 语句,重新分布已有表的数据,对表加锁(AccessExclusiveLock)进行数据重分布,释放表锁,通过新增Datanode Master 节点重新分布数据,现有方案就完成了集群数据扩容。
传统方案存在的问题是,在表的扩容期间,AccessExclusiveLock 锁会阻塞对该表的所有操作,对于大容量表,扩容时间长,会影响集群的可用性。由此, AntDB 提出了hot expasion 扩容方案,将扩容对集群可用性的影响限制在秒(10s) 级别。

1.关键技术
1)HashMap 路由算法
对于分区表,要根据记录的分区字段取值确定该记录所在的数据节点。原有路由算法为:
节点序号 =hash(hashkey)/ 节点数量
该算法存在两个问题:一是记录所在的位置是由分区字段值确定的,如果数据倾斜,无法将数据量多的节点中的数据迁移到数据量少的节点。二是扩容时,为避免数据全部重新分布,通常采用将 n 节点扩容到 2n 节点的方法。
系统中原有 2 个数据节点 DB1 和 DB2,扩容为 4 个数据节点 DB1、DB1’、DB2、DB2’,如图 3-23 所示。

由于 Hash 算法基于节点数目取模,无法做到 DB1 数据不动,仅增加 DB2’
节点,对 DB2 扩容,如图 3-24 所示。

为克服以上问题,hot expasion 扩容方案采用 HashMap 路由算法。首先,将整个集群的数据划分为 1024(可设定)的 slot。对分片 key 字段Hash 后,除 1024 取模,可以得到一个对应的 slotid。示意代码如下:

其次,建立 slotid 到物理节点的映射表,表示 slotid 的数据存放在 nodeid 节点,映射表(SlotNodeMap)维护数据的映射和每个 slot 的状态,包含以下字段:
●slotid:slot序号。
●nodeid:节点序号。
●status: slot的状态,包括在线( online)、迁移( move)、清除(clean)。

最后,数据路由时,通过 slotid 从映射表中找到对应的节点。示意代码如下:

2)数据热备份与增量数据同步

扩容节点需要复制被扩容节点的完整数据。数据复制包括基础数据复制和增量数据复制两个部分。采用 checkpoint 和 xlog 同步技术完成复制,不会影响被扩容数据节点对外提供服务。首先,在被扩容节点做 checkpoint;然后, 直接热拷贝数据到扩容节点做基线数据备份,之后,启动扩容节点,建立到被扩容节点的流复制,从 checkpoint 的 redo_lsn 位置开始回放 xlog 日志,做增量数据同步。AntDB 的 basebackup 工具已实现以上功能,hot expasion 直接使用basebackup 工具完成数据复制。
基于 AntDB 的逻辑复制,可以实现一个数据节点中的 slotid 数据热迁移到另外一个数据节点,以平衡数据的分布。

3)重复数据处理

将 1 个数据节点扩容为 2 个数据节点的过程中,1 条记录会存储在 2 个数据节点。重复数据的存在,需要增加记录的可见性处理和冗余数据删除。对于不包含分区键信息的 SQL 语句,数据节点需要根据 HashMap 路由算法计算该记录的 slotid,并判断该 slotid 是否属于本节点,该步骤称为 slot 可见性处理。对每条记录进行 Hash 算法,会占用较多 CPU 资源,应仅在必须时才进行 slot 可见性处理。路由切换完成后,被扩容节点和扩容节点都包含冗余数据。将冗余数据删除后,空间才能够被再次利用,实现数据扩容。冗余数据的删除不应影响正常的数据访问,并能够根据集群负载调整删除进度。
hot expasion 将扩容操作分为数据同步、路由切换、数据清理三个阶段, 节点的状态包括 online、move、clean、expended,具体如下:

●online:节点处于非扩容状态。
●move:被扩容节点状态,表示该节点正在向扩容节点同步数据。
●clean:被扩容节点已加入集群,节点包含冗余数据。

一次扩容中被扩容节点状态变化为 online → move → clean → online,扩容节点状态变化为expended → clean → online。
扩容具体流程见“z. 扩容示例”。

hot expasion 仅在数据清理阶段(节点状态为 clean)启用 slot 可见性处理, 在非扩容和扩容的同步数据阶段不启用 slot 可见性处理,将该操作对集群性能的影响降至最低。

节点进入 clean 状态后,自动启动清除进程。该进程首先统计当前节点的Hash 表,并依次对每个 Hash 表进行清除处理,删除非本节点数据。根据系统负载控制删除进度,当所有 Hash 表清除完成后,节点进入 clean 状态。清除处理使用普通的 delete from 语句处理流程,只在数据可见性判断时,返回不属于本节点的记录,从而删除非本节点数据,保留本节点数据。此清除方法,不需要改动 vacuum 和事务处理流程,对系统的影响最小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang | Web开发之Gin路由访问日志自定义输出实践

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

2022届本科毕业生10大高薪专业:大数据专业进入top3

对于普通人来讲,报考一个高薪的职业还是重中之重。那么什么专业高薪呢,很多人觉得是程序员,但这是职业而不是大学专业,专业千千万,选什么好呢,接下来看一看。 最近国家统计局发布了2022年城镇单位就业人员…

MMU翻译的时候以哪种level去执行是什么意思

【问题】 以哪个el去执行是什么意思&#xff1f;执行这条指令就会切到切换指令里指定的el吗&#xff1f; 【回答】 在一个core中&#xff0c;至少有一下Translation regime&#xff0c;AT S12E2R, <Xt> 就是使用EL2 Translation regime完成地址翻译。 Secure EL1&…

Cadence Allegro PCB设计88问解析(二十八) 之 Allegro中dimension environment命令使用(添加及删除尺寸标注)

一个学习信号完整性仿真的layout工程师 最近看到关于Anti Etch的设置&#xff0c;因为本人之前在layout设计是使用过这个命令。后来去到别的公司就不用了&#xff0c;从网上看到说这个命令是用来负片设计的。在这里在说下正片和负片的概念&#xff1a; 正片&#xff1a;是指在a…

机器学习|监督学习|无监督学习|8:20~9:20

目录 一、监督学习(Supervised learning) ​​​​​​​2.1分类(classification) 2.2回归(regression) 泛化能力 Generalization Ability 欠拟合 过拟合 不收敛 2.3 K近邻算法 k近邻分类​ k近邻回归 KNN变种 二、无监督学习(Unsupervised learning) 2.1 聚类(c…

[迁移学习]域自适应代码解析

一、概述 代码来自&#xff1a;https://github.com/jindongwang/transferlearning&#xff0c;可以前往github下载代码&#xff0c;本文涉及的代码的位置为&#xff1a;Code->DeepDA。理论基础可以参见&#xff1a;[迁移学习]域自适应 整体网络结构如下&#xff1a;可以视为…

Win7下静态变量析构导致进程卡死无法退出问题解决

项目中在用户机器Win7系统上好几次出现进程卡死&#xff0c;无法退出&#xff0c;在用户机器上抓取了dump&#xff0c;发现是在DllMain函数中执行了静态变量的析构&#xff0c;这个静态变量析构的时候会使用std::condition_variable 类型的成员变量通知其他线程退出。同时本地在…

PDF怎样转换成长图?这个方法,超级简单!

在当今社会&#xff0c;PDF文档广泛应用于各个领域。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将多个PDF页面合并成一个单独的长图&#xff0c;以便更方便地浏览、共享或嵌入到其他文件中。为了满足这一需求&#xff0c;记灵在线工具应运而生&#xff0c;它为我们…

一种全新的图像变换理论的实验(六)——研究目的替代DCT和小波

一、变换算法在图像视频中的核心作用 我们国产的变换算法是比较少的&#xff0c;基本上都是在小波、DCT和FFT上发展优化升级的应用。我之前的文章给出了一种基于加权概率模型的变换算法&#xff0c;该算法在一定的程度上能有效的保存低频数据。而且我基于该算法给出了一些新的…

微信小程序快速开发— TDesign模版初始化

最近有个商城类的小程序业务需要快速上线&#xff0c;看了一下微信官方的模版库&#xff0c;相中了TDesign&#xff0c;调研了半天&#xff0c;决定就从这个开始干。 调研的两个重点&#xff1a; 1、网络请求&#xff0c;即数据获取 2、模板本身存在些bug&#xff0c;如&…

从Kotlin中return@forEach了个寂寞

点击上方蓝字关注我&#xff0c;知识会给你力量 今天在Review&#xff08;copy&#xff09;同事代码的时候&#xff0c;发现了一个问题&#xff0c;想到很久之前&#xff0c;自己也遇到过这个问题&#xff0c;那么就来看下吧。首先&#xff0c;我们抽取最小复现代码。 (1..7).f…

Python 基于人脸识别的实验室智能门禁系统的设计与实现,附源码

1 简介 本基于人脸识别的实验室智能门禁系统通过大数据和信息化的技术实现了门禁管理流程的信息化的管理操作。平台的前台页面通过简洁的平台页面设计和功能结构的分区更好的提高用户的使用体验&#xff0c;没有过多的多余的功能&#xff0c;把所有的功能操作都整合在功能操作…

聚观早报|微软Xbox2023发布会汇总;苹果VisionPro头显低配版曝光

今日要闻&#xff1a;微软Xbox 2023发布会汇总&#xff1b;苹果Vision Pro头显低配版曝光&#xff1b;台积电在熊本县建设半导体工厂&#xff1b;苹果今年或能出货2.4亿台&#xff1b;中国含氯废塑料高效无害升级回收 微软Xbox 2023发布会汇总 6 月 12 日凌晨&#xff0c;微软…

Java 实战介绍 Cookie 和 Session 的区别

HTTP 是一种不保存状态的协议&#xff0c;即无状态协议&#xff0c;HTTP 协议不会保存请求和响应之间的通信状态&#xff0c;协议对于发送过的请求和响应都不会做持久化处理。 无状态协议减少了对服务压力&#xff0c;如果一个服务器需要处理百万级用户的请求状态&#xff0c;对…

Linux教程——Linux绝对路径和相对路径详解

在 Linux 中&#xff0c;简单的理解一个文件的路径&#xff0c;指的就是该文件存放的位置&#xff0c;只要我们告诉 Linux 系统某个文件存放的准确位置&#xff0c;那么它就可以找到这个文件。 指明一个文件存放的位置&#xff0c;有 2 种方法&#xff0c;分别是使用绝对路径和…

深度解读 KaiwuDB 的排序操作

一、单节点执行 在单节点环境执行一条简单的 SQL 语句 SELECT * FROM NATION ORDER BY N_NAME。NATION 是一张小表&#xff0c;只有 25 条记录&#xff1b;对第 2 列 N_NAME 进行升序排列。 1. 抽象语法树 上述示例中的 SQL 语句经过分析器解析后得到 AST&#xff0c;如下图…

(文章复现)面向配电网韧性提升的移动储能预布局与动态调度策略(2)-灾后调度matlab代码

参考文献&#xff1a; [1]王月汉,刘文霞,姚齐,万海洋,何剑,熊雪君.面向配电网韧性提升的移动储能预布局与动态调度策略[J].电力系统自动化,2022,46(15):37-45. 1.基本原理 1. 1 目标函数 在灾害发生后&#xff0c;配电网失去主网供电&#xff0c;设故障的持续时间可根据灾害…

基于SpringBoot+Vue的酒店管理系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

代码随想录 二叉树 Java(二)

文章目录 &#xff08;*中等&#xff09;222. 完全二叉树的节点个数&#xff08;*简单&#xff09;110. 平衡二叉树&#xff08;*简单&#xff09;257. 二叉树的所有路径&#xff08;简单&#xff09;404. 左叶子之和&#xff08;简单&#xff09;513. 找树左下角的值&#xff…

设计模式的原则(一)

相信自己&#xff0c;无论自己到了什么局面&#xff0c;请一定要继续相信自己。 新的世界开始了&#xff0c;接下来&#xff0c;老蝴蝶带领大家学习一下设计模式。 我们先了解一下 设计原则 一.设计模式 一.一 设计原则 设计模式常用的七大原则: 单一职责原则接口隔离原则…