使用 Perl 比较 2 个不同数据库中的大约 700,000 行的更快方法是什么?
我正在使用 Perl 使用 DBI 连接到 2 个不同的数据库(MySQL 和 Sybase),每个数据库大约有 700,000 条记录,我需要它们相同(很可能每周左右都会有一些不同的记录),首先这样做的时间只是复制表的问题,但这需要定期完成(至少每周一次),并且每次简单地删除表并再次复制所有内容并不是一个好的解决方案,所以我曾是想知道:使用 Perl 比较 2 个不同数据库的大约 700,000 行的更快方法是什么?
注意:这些表有 5 个字段(所有字段都是字符类型,包括主键)
I'm using Perl to connect to 2 different databases (MySQL and Sybase) using DBI, there's around 700,000 records on each and I need them to be the same (most likely there will be a few different records every week or so), first time doing this would be simply a matter of copying the table, but this needs to be done on a regular basis (at least once a week), and simply dropping the table and copying everything again every time is not a good solution, so I was wondering: What's the faster way to compare around 700,000 rows from 2 different databases using Perl?
Note: The tables have 5 fields (all of them character type including the primary key)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将每个已排序的表完整加载到 Perl 中,然后运行 算法:两个列表上的 Diff。最后,您将获得一个很好的列表,其中包含要删除的行和要插入的行。某些行可能会被删除并重新插入(如果这些行挂有外键,则需要执行更新而不是删除/插入)。
700,000 行对于现代机器来说并不是很多数据,也不是很多内存。
如果您只需要存在行(即行存在或不存在,而不是实际的行更改),您可以只对键进行比较,然后从那里获取您需要的行。
Load each table, sorted, in to Perl in its entirety, then run Algorithm:Diff on the two lists. In the end you'll get a nice list of rows to delete, and rows to insert. Some rows may be deleted and reinserted (if you have foreign keys hanging of those rows, you'll need to do an update rather than an delete/insert).
700,000 rows is not a lot of data on modern machines, nor a lot of memory.
If you only need existence of rows (i.e. the rows exists or it doesn't rather than actual row changes), you can just do a diff on the keys, then fetch the rows you need from there.