亚信安慧AntDB-T数据库重分布的实现原理

摘要:

亚信安慧AntDB-T是一款通用企业级、高可用、高性能的原生分布式关系型数据库,具有多种分片方式。在数据库的使用过程中,随着数据的变更和增长,需要重新修改表的分片方式。

AntDB-T数据库支持重分布命令,在内核中有两种实现方式,本文主要针对通过既有的一些SQL命令来实现重分布的内部实现进行介绍。

AntDB-T的分片方式介绍

AntDB-T目前支持以下四种分片方式:

  • 复制表(replication)

  • Hash分片表

  • Modulo分片表

  • Random分片表

复制表在每个分布节点上都有一份完整的表数据,而其他三种分片表,表数据会根据相应的规则,散列在多个节点上。

AntDB-T重分布功能介绍

AntDB-T支持以下几种类型的数据重分布:

  • replication修改为hash、modulo、random

  • hash 修改为 random、modulo、replication

  • modulo 修改为 hash、random、replicaiotn

  • random 修改为 hash、modulo、replication

  • add node --增加分布节点

  • delete node --减少分布节点

  • to node (nodelist) --重新设置分布节点

对应的重分布命令如下:

  • ALTER TABLE name DISTRIBUTE BY distri_type

  • ALTER TABLE name ADD NODE (node_name[, … ])

  • ALTER TABLE name DELETE NODE (node_name[, … ])

  • ALTER TABLE name to node (node_name[, … ])

重分布的内部实现

AntDB-T内核有两种实现重分布的方式,其中一种是通过既有的一些SQL命令来实现的,本文主要就该方式进行一个说明。

在AntDB-T数据库中,表的分布方式及分布的节点信息是存储在coordinator节点的表分布元数据表中的,如图1。重分布的主要处理流程就是修改计算表分布元数据表,并按照新的分片方式,将数据重新分布到各个节点上。

图片

图1:计算节点元数据示例

综上所述,这里是通过一些SQL命令来实现表数据的重分布,我们将这些SQL命令分为两种,一种需要在修改表分布元数据之前执行,类型是CATALOG_UPDATE_BEFORE;另一种是在修改表分布元数据之后执行,类型是CATALOG_UPDATE_AFTER。

下面针对不同的重分布方式进行内部实现的具体分析。

1、通用的做法

  • 首先,首先生成一个copy to命令,在修改表分布元数据之前,将所有的表数据拷贝到coordinator节点。

  • 其次,生成truncate命令,将所有节点的表数据进行删除。

  • 接着,按照重分布命令,修改表分布元数据,修改为最终需要的分片方式。

  • 最后,生成一个copy from命令,将拷贝到coordinator节点的数据按照新的分片规则,下发到相应的datanode节点。

图片

图2:通用重分布流程

以上的流程适合所有的重分布命令,但是有几种情况可以简化一些流程,提高重分布的效率,对于这些场景,在下面会逐一介绍。

2、复制表增加节点

对于复制表的增加节点,没有必要truncate所有节点的数据。具体执行流程如下:

  • 首先,生成一个copy to命令,在修改表分布元数据之前,将表数据拷贝到coordinator节点。

  • 其次,修改表分布元数据。

  • 最后,生成一个copy from命令,将拷贝到coordinator节点的数据按照下发到新增的节点。

图片

图3:复制表增加节点

3、复制表减少节点

对于复制表的减少节点,只需要truncate掉对应节点的数据就可以了,没有必要去拷贝数据。

图片

图4:复制表减少节点

4、复制表修改为hash、modulo分片表

复制表在所有datanode节点上都有完整的数据,当需要修改为hash或者modulo分片表时,datanode节点只需要删除不属于本节点的数据即可。

在修改表分布元数据后,我们根据新的分片方式生成每个节点对应的delete命令,datanode节点执行这些命令,就实现了重分布的目的。

图片

图5:复制表修改为hash、modulo分片表

结论

本文介绍了AntDB-T数据库重分布命令内部实现的一种方式,内核中提供了重分布命令后,用户不需要再手动导入导出数据、重建表等操作,一个命令即可实现重分布的功能。

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

使用docker制作Android镜像(实操可用)

一、安装包准备 1、准备jdk 下载地址:Java Downloads | Oracle 注意版本!!!!!! 我下载的jdk17,不然后面构建镜像报错,就是版本不对 2、准备安装的工具包 ttps://dev…

迭代器模式【行为模式C++】

1.简介 迭代器模式是一种行为设计模式, 让你能在不暴露集合(聚合对象)底层表现形式 (列表、 栈和树等) 的情况下遍历集合(聚合对象)中所有的元素。 迭代器的意义就是将这个行为抽离封装起来&a…

C语言中的数据结构--链表的应用1(2)

前言 上一节我们学习了链表的概念以及链表的实现,那么本节我们就来了解一下链表具体有什么用,可以解决哪些实质性的问题,我们借用习题来加强对链表的理解,那么废话不多说,我们正式进入今天的学习 单链表相关经典算法O…

题目:画图,综合例子。

题目:画图,综合例子。 There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should…

【CSS】利用Vue实现数字翻滚动画效果

利用Vue实现数字翻滚动画效果 在很多数据可视化的需求中,动态呈现数据变化是一个常见且具有较强视觉冲击力的手段,尤其是数字的实时变化。今天我们将探讨如何使用 Vue.js 和 CSS3 来实现数字的翻滚动画效果,即模拟真实物体在Z轴上翻动的效果…

二分查找总结(十八天)

704. 二分查找 题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输…

elasticsearch不删除索引只清理数据——筑梦之路

这里主要使用了elasticsearch的接口 _delete_by_query # 清理指定时间之前的数据curl -X POST "http://localhost:9200/[索引名]/_delete_by_query?pretty&wait_for_completionfalse" -H Content-Type: application/json -d {"query": {"range…

WPS 365开启企业一站式AI办公;联发科推出生成式AI服务平台;马斯克:AI 明年或超越人类智力

WPS 365 升级一站式 AI 办公 昨日,金山办公生产力大会举行,现场发布了面向组织和企业的办公新质生产力平台 WPS 365,其包含升级的 WPS Office、最新发布的 WPS AI 企业版和 WPS 协作。 WPS 365 将能覆盖一个组织日常办公基本需求&#xff0c…

我们把 Prompt 函数和类更进一步了

前言 上次我们发了一篇文章,很好的解决了 Prompt 的使用问题: 最好的Prompt管理和使用依然是 Class 和 Function - 继续让LLM和编程语言融合 相比其他方案,具有非常大的优势,完全融入到了现有的编程语言里,而不是大段的…

SpringBoot-如何设计优秀的后端接口?

在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。 那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问…

Java快速入门系列-6(数据库编程与JDBC)

第六章:数据库编程与JDBC 6.1 SQL基础6.1.1 SQL基本结构与命令6.1.2 SQL高级查询6.1.3 SQL子查询与联接6.2 JDBC原理与使用6.2.1 JDBC驱动程序与URL6.2.2 Statement、PreparedStatement与CallableStatement6.2.3 数据库事务处理6.3 数据库连接池6.4 事务管理6.1 SQL基础 SQL(…

2. Spring的创建和Bean的存取

经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI ,本节要讲的是如何Spring框架实现实现DI。 本节目标: Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…

TiDB MVCC 版本堆积相关原理及排查手段

导读 本文介绍了 TiDB 中 MVCC(多版本并发控制)机制的原理和相关排查手段。 TiDB 使用 MVCC 机制实现事务,在写入新数据时不会直接替换旧数据,而是保留旧数据的同时以时间戳区分版本。 当历史版本堆积过多时,会导致读…

在Linux终端查找指定类型的文件并统计数量

下面举例说明: find /path/to/directory -type f -exec file {} \; | grep "MIDI"它的作用是在指定的目录(/path/to/directory)中搜索所有的文件(-type f),然后使用file命令检查每个文件的类型&a…

【C++学习】C++11新特性(第二节)—— 右值引用与移动语义超详解

文章目录 文章简介二.右值引用1.什么是左值,什么是右值?什么是左值引用,什么是右值引用?2.左值引用与右值引用比较 三.右值引用使用场景和意义1.左值引用的使用场景:2.左值引用的短板:3.右值引用与移动构造…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说,需要知道事件(Event)、Case、Action等概念。Axure RP中给出这些概念,是为了方便原型的构建,尤其是高保真原型的构建。 事件(Event)是附着于控件…

2024年万字长文-数据仓库面试题及参考答案全解析

数据仓库作为大数据分析的基石,对于大数据架构师而言,掌握其核心概念和技能至关重要。本文将深入探讨数据仓库相关的面试题,并提供详尽的参考答案,旨在帮助读者全面理解数据仓库的构建、管理和优化,以及如何在实际工作中应用相关知识。 目录 1. 数据仓库的定义及其与数据…

独孤思维:副业没做起来,要退钱

01 有些人,纯粹得可爱。 问我,项目没做起来,是不是该退钱? 那我反过来问你,你赚了钱,是不是该分我点? 02 昨天周一,是独孤最忙的时候。 因为各种大会小会,开了4个会…

PHP自助建站系统,小白也能自己搭建网站

无需懂代码,用 自助建站 做企业官网就像做PPT一样简单,您可以亲自操刀做想要的效果! 自助建站是一款简单、快捷、高效的工具,可以帮助您制作响应式网站。我们的自助建站系统,将传统的编码工作转化为直观的拖拽操作和文…

buuctf之jarvisoj_level2

一、查看属性 首先还是必要的查看属性环节: 可以知道该文件是一个x86架构下的32位小段ELF程序,开启了栈不可执行(NX)保护,ret2shellcode是不行的 简单执行可以看到有一个简单的输入后输出hello world 二、静态分析 …