面试题答案
一键面试1. 基于行数对比
- 适用场景:简单快速地初步判断两个数据库中相同表的数据量是否一致,适用于数据量较小或者对数据一致性要求不是极高,只做大致判断的场景。比如在开发测试环境进行数据库迁移前的初步检查。
- 局限性:只能判断行数相同,无法确保每行数据内容一致。即使行数一样,也可能存在数据错位、某些字段值不同等情况。
2. 计算校验和
- 适用场景:适用于需要进一步确认数据一致性,但又不想逐行对比的场景。例如在生产环境迁移前,快速发现数据是否有较大差异。可以对表中的关键列或者所有列计算校验和(如使用
SUM(CRC32(column_name))
等函数),对比源库和目标库同一表的校验和结果。 - 局限性:如果出现哈希碰撞(不同数据计算出相同校验和),可能会误判数据一致。虽然哈希碰撞概率较低,但不能完全排除。而且校验和计算依赖于数据库计算能力,对于大数据量表计算可能耗时较长。
3. 逐行对比
- 适用场景:对数据一致性要求极高的场景,如金融、医疗等关键数据迁移。通过编写脚本逐行对比源库和目标库的数据,确保每行每列数据完全一致。
- 局限性:性能开销极大,非常耗时,尤其是大数据量表。并且编写逐行对比脚本可能较为复杂,需要考虑数据库连接、数据类型处理等诸多问题。