有奖捉虫:云通信与企业服务文档专题,速来> HOT

特性描述

对于 MySQL 这种 OLTP 型数据库同步数据时,如果一个事务涉及了多行数据或者是多个表的数据的操作时,原生 ClickHouse(MaterializedMySQL)不支持事务的原子可见,可能出现幻读等异常数据。
TDSQL-H LibraDB 的 MVCC 版本针对该问题进行了优化,对于从 MySQL 这种 OLTP 型数据库同步,一个事务的变更数据在 TDSQL-H LibraDB 的多个分片、多个分区上都是原子可见的,保证的数据的严格一致。 即 LibraDB 的 CDC 任务保证了源端数据库事务的最终一致性。

使用限制

仅 TDSQL-H LibraDB 的 MVCC 版本支持。

前提条件

已创建上线 MVCC 版本的 TDSQL-H LibraDB 实例。
已创建 CDC 任务,同步类型为表结构+全量数据+增量数据。

使用说明

同一批删除多行数据,非 MVCC 版本不支持数据的原子可见,MVCC 版本数据原子可见。多个表的原子可见与同一批删除多行数据原理类似。 在 CDC 任务目标端(即 TDSQL-H LibraDB)查询非 MVCC 版本和 MVCC 版本同步的数据。
下文以同一批删除多行数据为例。
非 MVCC 版本:
1.1 查询 t3 表中的数据。
select * from t3;

# 返回结果
Query id: 5312f276-027e-44cc-9ff3-7e3aa752705d

┌─id─┬─name─┬─birth───────────────┬─_sign─┬─_version─┐
1 │ dd │ 2022-06-21 14:29:0815295
2 │ cc │ 2022-06-22 14:29:2215296
4 │ xx │ 2022-06-24 14:29:4915298
8 │ tt │ 2022-06-23 14:29:3415297
└────┴──────┴─────────────────────┴───────┴──────────┘

4 rows in set. Elapsed: 0.002 sec.
1.2 在 CDC 任务源端同时删除 id=1、id=2、id=4 的数据后,并且迅速在目的端 TDSQL-H LibraDB 中查询数据。因为不支持数据的原子可见性,故可能返回删除过程中的任意中间状态。
# 返回结果示例
SELECT count(*) AS cnt FROM t3 FINAL WHERE _sign > 0;

Query id: f7dba001-a0cc-41f7-bdfa-04b9eec12e0a

┌─cnt─┐
2
└─────┘

7 rows in set. Elapsed: 0.003 sec.
在短时间内,上述查询结果可能是 4、3、2、1 中的任意值(部分数据没有完全同步),但最终查询结果为 1(所有数据均已同步至目标端,并且可见)。
MVCC 版本:
1.1 查询 t5 表中的数据。
# 返回结果
SELECT count(*) AS cnt FROM t5

Query id: 95cdaac0-31ee-41ef-a6dc-b58208dbb8c4

┌─cnt─┐
4
└─────┘

1 rows in set. Elapsed: 0.004 sec.
1.2 在 CDC 任务源端同时删除 id=1、id=2、id=4 的数据后,在目的端 TDSQL-H LibraDB 中查询数据,数据严格实时一致(事务中所有变更同时生效)。
select count(*) as cnt from t5;

# 返回结果

Query id: 6420d6a8-5ae6-407e-a080-f706a4509a16

┌─cnt─┐
1
└─────┘

1 rows in set. Elapsed: 0.004 sec.
因为数据严格实时一致,故查询结果只可能是4(所有数据均未同步到目标端)或者是1(所有数据均已同步到目标端),即为数据原子可见。