我试图检查2个不同服务器上2个不同数据库之间2个表中数据的差异。
我可以通过primary_key(id)
比较它们,但是我该如何正确执行呢?表引擎不是InnoDB
。
我最初的方法是这样的:(未经测试的代码)
v2 = v2db.query("SELECT id FROM #{table1}")
v3 = v3db.query("SELECT id FROM #{table2}")
diff = v2 - v3
if diff.count > 0
puts "diff is greater than 0"
elsif diff.count < 0
puts "diff is less than 0"
else
puts "tables in sync"
关于表包含
Federated
行并将其全部加载到结果中的更好方法的任何想法都会很麻烦。 最佳答案
如果您只想查看行数之间的差异,我想解决方案将是这样的:
v2 = v2db.query("SELECT count(id) FROM #{table1}")
v3 = v3db.query("SELECT count(id) FROM #{table2}")
diff = v2 - v3
if diff.count > 0
puts "diff is greater than 0"
elsif diff.count < 0
puts "diff is less than 0"
else
puts "tables in sync"
但是,如果要检查两个数组列表是否相同,则必须为每个查询创建一个带有ID的数组列表,并检查ID上的两个数组列表。
检查第一个数组列表的大小
检查第二个的大小
如果不相等,则返回false
如果两个数组列表的大小相等,则
如果存在差异,则以公共长度的大小进行迭代
不等于返回false
如果所有行没有差异,则返回true
该算法的复杂度为O(n)。