展开导读
链接复制成功!
数据验证
- 数据验证标准
迁移完成后,需要对源端和目的端数据做一致性比对,对于数据一致性比对的精度,不同的场景有不同的要求。一般来说,核心业务的数据库表要求源端和目的端100%一致;对于大数据类业务中的部分场景,例如用户画像计算等,可以约定原始数据90%一致。如下是一个参考标准,可根据实际情况调整:
表1 数据校验标准参考 分类
数据一致性要求
业务举例
核心业务
100%
电商系统的核心会员数据、交易数据、支付数据等,数据是用户最核心的资产,涉及到真实的财产金额等。所以这部分核心业务对于数据一致性要求是100%。建议进行数据的行数对比和对象对比,抽样内容对比。
非核心业务
99.9%
电商系统的用户购物车商品数据、客服沟通消息数据等,作为非核心业务的数据,如果有微量损失,并不会影响客户的业务使用和体验。建议若切换时间有限,可以只进行数据的行数对比。
边缘业务
90%
电商系统的首页推荐数据、用户浏览数据、用户画像数据等,如果有一部分损失,并不会影响客户的业务使用可体验。建议进行表级的的行数对比,抽样内容对比。
- 数据验证方法
数据分为数据库数据、中间件数据和文件数据,这三种数据的一致性验证方法和工具不同:
- 数据库数据一致性验证的方法如下表所示。
表2 数据库一致性对比方式 对比项
工具
描述
库和表级内容对比
DRS工具
查询对比数据库表的每一条数据,确保每一条的每一个字段都与源端数据库表一致。相较于行对比,内容对比较慢。
python脚本
根据DRS任务的ID,调用接口批量执行对比任务,对比结果输出到xlsx文件中。相比于工具可批量执行,执行效率较高。
库和表级对象对比
DRS工具
对数据库、索引、表、视图、存储过程和函数、表的排序规则等对象进行对比。
python脚本
根据DRS任务的ID,调用接口批量执行对比任务,对比结果输出到xlsx文件中。相比于工具,可批量执行,执行效率较高。
库和表级行数对比
DRS工具
对比表的行数是否一致,只查询表的行数,对比速度较快
python脚本
批量脚本,创建N个并发任务线程,遍历所有表进行逐一COUNT,输出对比结果到xlsx文件中,相比于工具可批量执行,执行效率较高。
- 中间件数据一致性验证的方法如下表所示:
表3 中间件一致性对比方式 对比项
工具
描述
Keys数量对比
redis-cli
通过redis-cli命令info keyspace查看keys参数和expires参数的值,对比源Redis和目标Redis的keys参数分别减去expires参数的差值。如果差值一致,则表示Keys数量一致,迁移正常。
Key-value内容对比
开源Redis-Full-Check工具
通过全量对比源端和目的端redis中的数据内容的方式来进行数据校验,其工具实现方式会多次抓取源和目的端的数据进行差异化比较,记录不一致的数据进入下轮对比。然后通过多轮比较不断收敛。最后sqlite中存在的数据就是最终的差异结果,无内容则表示数据内容完整,迁移正常。
- 文件类数据一致性验证的方法如下表所示:
表4 文件数据一致性对比方式 类型
对比项
工具
描述
对象存储
对象数量
OMS
OMS迁移工具,通过MD5校验文件完整性和比对两边桶对象数据量是否一致。
文件存储
文件数量
rclone
Rclone迁移工具,使用MD5哈希值来验证文件的完整性。同步后会再对比源端和目的端文件数量。
rsync
rsync迁移工具,使用MD5哈希值来验证文件的完整性,如果校验和不匹配,则rsync会重新传输该文件,以确保数据一致性。同步后会再对比源端和目的端文件数量。
文件大小
python脚本
迁移完成后,通过对比源端和目的端总文件大小判断是否一致。
文件内容
python脚本
迁移完成后,通过计算源端和目的端文件的哈希值,比较两个文件的哈希值是否一致。
- 数据库数据一致性验证的方法如下表所示。