写点什么

一种元数据同步的方法

作者:KaiwuDB
  • 2023-04-03
    上海
  • 本文字数:1442 字

    阅读完需:约 5 分钟

一、技术背景

在面向数字能源领域,KaiwuDB 就元数据同步存在以下应用场景:源端执行元数据操作语句,同时对应源端元数据变化;这些元数据需要在目标的一端进行同步,而实现这一目标的方法是通过数据复制同步模块来完成。


元数据复制同步可以分为两个部分:

  • 元数据回放表的复制模块

  • 元数据回放模块

本文主要介绍整个元数据同步模块中的后半部分,即元数据回放(metadata backfill)模块的技术实现。


二、技术基础

1. 元数据回放表

此表用于记录源端元数据操作 SQL 语句:

表 1:元数据回放表


2. 表级别的复制

表级别的复制是元数据回放的基础。通过复制语法可以将源端的元数据回放记录表复制到目标端,在源端通过 DDL 对元数据进行操作的语句,将会由表级别的复制发送到目标端,完成对元数据记录表的复制操作。元数据回放模块在此表的同步基础上,进行两端的元数据回放并达到元数据同步的目的。


元数据模块由表级别的复制调用触发。在表级别的复制过程中,存在将数据写入元数据表的操作。选择在数据写入到目标端的回放表时,触发回放模块,进行检索并实现元数据回放。


三、实现流程

图 1:回放流程


1. 记录元数据操作语句

我们在执行元数据操作的 SQL 语句时,在执行流程中调用回放表写入接口,将 SQL 语句等其他参数记录在元数据回放表中。


写入此表的数据中,生成的主键为当前的 portal_id(portal_id 和源端绑定,每个端的 portal_id 是不同的)和生成的 rowid 联合主键。因此,纵使多个源端的语句也可以在同一目标端聚合在同一张回放表中,不会产生主键冲突问题。默认记录的 SQL 语句的回放状态为未回放状态。

2. 回放模块的启动

回放模块的启动是基于启动服务时拉起一个协程。通过启动一个回放协程,协程中会检测信号 signal 作为回放模块的触发机制。


若 signal 接收到信号,就触发回放模块的执行。启动后的回放模块,等待复制模块的触发信号,进而触发回放。

3. 回放模块的触发

复制模块通过复制表将源端记录表复制到目标端。随着不断的 SQL 记录写入回放表,表级别的复制可以将后续的 SQL 语句记录发送到目标端。


在目标端上,写入回放表时通过向 signal 赋值,即向回放协程模块发送触发信号,就可以在回放模块中触发回放模块。触发回放模块后,就可以进行到下一步回放模块的执行。

4. 回放模块的执行

图 2:回放执行模块


1)获取回放语句

通过对复制过来的源端的回放表的查询,通过筛选查出回放表的未回放语句,查找对应 SQL 记录的回放状态,从而拿到需要回放的待回放语句。


从回放表拿到的语句解析为待执行的字符串语句,这些语句就是待同步在目标端执行的语句,将其传入回放模块的下一阶段,执行回放语句。


2)执行回放语句

将获取的待回放语句传入执行回访模块,利用执行模块对获取到的语句进行执行,完成元数据在目标端的同步执行。


执行完语句后,需要修改此条语句的回放状态,进入更新语句的回放状态模块。


3)更新回放状态

回放成功的语句,需要进入更新回放状态模块,将记录的语句执行成功的更新状态为 true 已执行,下次重新获取的语句就会跳过已经被回放过的语句。


4)事务控制

回放模块的执行中,选择将执行回放语句模块放入同一个事务执行,若语句回放失败,则不进行更新状态;若更新回放状态失败,则回退回放语句的执行。放在同一个事务中,保证回放状态和是否成功执行回放语句保持一致。


四、总结优化

基于复制的技术基础,回放模块启动后,触发和执行回放模块,在源端执行的元数据操作 SQL 语句,同步到目标端进行回放,从而达到元数据的同步。本文讲述的是一个基础的实现思路,未来仍将有很大的优化空间。

用户头像

KaiwuDB

关注

还未添加个人签名 2021-04-29 加入

KaiwuDB 是浪潮集团控股的数据库企业,公司汇聚了全球顶尖的数据库人才,以多模数据库为核心产品,面向工业物联网、数字能源、交通车联网、智慧产业等各大行业领域,提供领先创新的数据服务软件。

评论

发布
暂无评论
一种元数据同步的方法_数据复制_KaiwuDB_InfoQ写作社区