摘要:

亚信安慧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。重分布的主要处理流程就是修改计算表分布元数据表,并按照新的分片方式,将数据重新分布到各个节点上。

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

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

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

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

1、通用的做法

  • 首先,首先生成一个copy to命令,在修改表分布元数据之前,将所有的表数据拷贝到coordinator节点。
  • 其次,生成truncate命令,将所有节点的表数据进行删除。
  • 接着,按照重分布命令,修改表分布元数据,修改为最终需要的分片方式。
  • 最后,生成一个copy from命令,将拷贝到coordinator节点的数据按照新的分片规则,下发到相应的datanode节点。

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

图2:通用重分布流程

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

2、复制表增加节点

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

  • 首先,生成一个copy to命令,在修改表分布元数据之前,将表数据拷贝到coordinator节点。
  • 其次,修改表分布元数据。
  • 最后,生成一个copy from命令,将拷贝到coordinator节点的数据按照下发到新增的节点。

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

图3:复制表增加节点

3、复制表减少节点

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

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

图4:复制表减少节点

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

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

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

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

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

结论

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

关于亚信安慧AntDB数据库

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