我试图检查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)。

07-25 22:49
查看更多