使用 Perl 比较 2 个不同数据库中的大约 700,000 行的更快方法是什么?

发布于 2025-01-07 16:06:29 字数 274 浏览 0 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

郁金香雨 2025-01-14 16:06:29

将每个已排序的表完整加载到 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文