检查数据库上2个表之间的数据差异

时间:2014-05-09 07:01:15

标签: mysql sql ruby

我正在尝试检查两个不同服务器上2个不同数据库之间2个表中的数据差异。

我会按primary_key(id)对它们进行比较,但我怎么能正确地做到这一点?表格引擎为InnoDB而非Federated

我的初始方法类似于:(未经测试的代码

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"

关于更好的方法的任何想法,因为表包含30,000+行并将这一切加载到结果中将是麻烦的。

1 个答案:

答案 0 :(得分:0)

如果您只想查看行数的差异,我猜解决方案会是这样的:

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的arraylist,并检查id上的2个arraylists,如果你想检查它们是否相同。

  • 检查第一个arraylist的大小
  • 检查第二个
  • 的大小
  • 如果不相等则返回false
  • 如果两个arraylists的大小相等,那么
  • 如果存在差异,则使用公共长度的大小进行迭代 不等于回报错误
  • 如果所有行没有差异则返回true

此算法的复杂性为O(n)。