
# 数据验证
- **数据验证标准**
  迁移完成后，需要对源端和目的端数据做一致性比对，对于数据一致性比对的精度，不同的场景有不同的要求。一般来说，核心业务的数据库表要求源端和目的端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脚本 | 迁移完成后，通过计算源端和目的端文件的哈希值，比较两个文件的哈希值是否一致。                                          |
       
    
   
 
