简介
在数据同步的场景下,上下游数据的一致性校验是非常重要的一个环节,缺少数据校验,可能会对商业决策产生非常负面的影响。。Sync-diff-inspector 是 Data Platform 团队开发的一款一致性校验工具,它能对多种数据同步场景的上下游数据进行一致性校验,如多数据源到单一目的(mysql 中分库分表到 TiDB 中)、单一源到单一目的( TiDB 表 到 TiDB 表)等,在数据校验过程中,其效率和正确性是至关重要的。首先我们看下 Sync-diff-inspector 的架构图,对 Sync-diff-inspector 的作用和实现原理有一个大致的认知。

Why Sync-diff-inspector 2.0?
在 1.0 版本中,我们遇到客户反馈的一些问题,包括:
- 针对大表进行一致性校验时出现 TiDB 端发生内存溢出。
- 不支持 Float 类型数据校验的问题。
- 结果输出对用户不友好,需要对校验结果进行精简。
- 检验过程中发生 GC,导致校验失败。
造成以上问题的原因与原版的实现方式有关:
- 采用单线程划分 Chunk,该表中所有已被划分的 Chunk 需要等待该表中所有 Chunk 全部被划分才会开始进行比对,这会导致这段时间内,TiKV 的使用率降低
- Checkpoint 功能将校验过的每个 Chunk 的状态写入数据库,所以写入数据库的 IO 成为校验过程的瓶颈。
- 当 chunk 范围内的 checksum 不同时,直接进行按行比对,消耗大量 IO 资源。
- 缺少自适应 GC 的功能,导致正在校验的 Snapshot 被 GC,使得校验失败。
- …
Sync-diff-inspector 2.0 新特性
Chunk 划分
对于比较两个表数据是否相同,可以通过分别计算两个表的 checksum 来判断,但是确定哪一行出现了不同则需要逐行比对。为了缩小 checksum 不一致时需要进行逐行比对的行数, Sync-diff-inspector 采用了折衷的方案:将表按照索引的顺序划分成若干块(chunk),再对每个 chunk 进行上下游数据比对。
chunk 的划分沿用了之前的方法。TiDB 统计信息会以索引作为范围将表划分为若干个桶,再对这些桶根据 chunk 的大小进行合并或切分。切分过程则选择随机行作为范围。
原版 Sync-diff-inspector
Sync-diff-inspector 2.0:优化数据一致性校验与性能提升

本文介绍了Sync-diff-inspector 2.0升级版在解决原有版本问题(如内存溢出、浮点数校验、结果展示和GC影响)上的关键改进,包括异步chunk划分、checkpoint优化、自适应chunkSize和索引策略,显著提升了性能和资源利用。
最低0.47元/天 解锁文章
869

被折叠的 条评论
为什么被折叠?



