给定 2 个大表(想象一下数亿行),每个表都有一个字符串列,如何获得差异?
查看开源 Percona 工具包——具体来说,pt 表同步 http://www.percona.com/doc/percona-toolkit/pt-table-sync.html公用事业。
其主要目的是将 MySQL 表与其副本同步,但由于其输出是协调两个表之间差异所需的 MySQL 命令集,因此很适合比较两个表。
它实际上在幕后所做的事情有点复杂,并且它实际上使用不同的方法,具体取决于它可以告诉您的表(索引等)的信息,但基本思想之一是它可以快速进行 CRC32 校验和在索引块上,如果校验和不匹配,它会更仔细地检查这些记录。注意这个方法是much比线性遍历两个索引并比较它们更快。
但它只能帮助你完成一部分任务。由于生成的命令旨在将副本与其主服务器同步,因此它们只是替换所有不同记录的副本的当前内容。换句话说,生成的命令修改all
记录中的字段(不仅仅是已更改的字段)。所以一旦你使用pt-table-sync
要查找差异,您需要将结果包装在某些内容中,以便通过比较记录中的每个字段来检查不同的记录。
But pt-table-sync
做你已经知道的困难部分:检测差异,really快速地。它是用 Perl 编写的;来源应该提供良好的面包屑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)