背景
目前正在对 scala 项目(某块业务)重构,重构成 Java 微服务,业务、表设计都有些许变化,其中涉及到数据迁移,简单来说就是从老表迁到新表(表结构发生了变化)。为了保证迁移前后数据的一致性,需要进行一些必要的验证。本文主要讨论下自己在进行数据一致性校验时用到的方法,仅仅作为一种数据验证的思路,分享给大家,内容可能有一些瑕疵,欢迎大家指正。
1.数据迁移场景描述
以下只列举几个特殊场景:
scala 那边的表字段名和现在微服务中的字段名大部分不一致
scala 项目 A 表中的大部分字段需要迁移到微服务中的 A’ 表中,但是有一小部分字段需要和 B 表中的所有字段关联后迁移到微服务的 B’ 表中
scala 项目中的一些枚举与现在微服务中重新规定的枚举有一些差异
待迁移表中有一个特别大的待迁移字段:
`value` varchar(10000) NOT NULL COMMENT '属性值';
术语约定:
源表:scala 中待迁移到微服务中的表
目的表:微服务中的表
2、验证函数选择
网上介绍更多的方法是借助 pt-table-chum 工具进行验证,下面是其原理介绍:
pt-table-checksum 是 Percona-Toolkit 的组件之一,用于检测MySQL主、从库的数据是否一致。其原理是在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库执行,并在从库上计算相同数据块的checksum,最后,比较主从库上相同数据块的chec七墨博客ksum值,由此判断主从数据是否一致…
根据其原理发现这个工具基于当前特殊场景好像不是很适合,但是还是很有借鉴意义的,比如原理中提到的比较主从库上相同数据块的 checksum 值,那我们这边也可以对源表与目的表分别进行分组并取 checksum 值,最后对比相同数据块的checksum值就可以了。所以搜索下 checksum 是如何计算的,找到如