我每天都在下载 .COM 区域文件。它是世界上所有 .COM 域及其主要名称服务器的列表。
区域文件示例:
DAYTONOHIOJOBS NS NS1.HOSTINGNET
DAYTONOHIOJOBS NS NS2.HOSTINGNET
DAYTONOHIOMAP NS NS1.HOSTINGNET
DAYTONOHIOMAP NS NS2.HOSTINGNET
DAYTONOHIONEWS NS NS1.HOSTINGNET
DAYTONOHIONEWS NS NS2.HOSTINGNET
为了节省磁盘空间,您可以看到 .COM 已从域名中删除(反正都是 .COM)。 名称服务器也是如此(如果它以 .COM 结尾,则它已被删除)。
这个区域文件大约有 270,000,000 行,大约 9 GB。
我的目标是监控特定的名称服务器。每天我都想要一个包含该特定名称服务器的所有域的列表,还需要一个包含该名称服务器的所有新域的列表(新的如:昨天这个域还没有那个名称服务器)。
我写了一个 perl 脚本来打开和加载“昨天”数据库,然后打开“今天”数据库并循环比较。但这需要数小时和大量内存。
执行此操作的最佳方法是什么?
最佳答案
根据我所知道的,我会这样做:
让脚本读取第一个文件。对于与感兴趣的名称服务器对应的每一行,将条目添加到 HashMap 中。
让脚本读取第二个文件。对于与感兴趣的名称服务器对应的每一行,检查该条目是否在 HashMap 中。如果不是,那就是新的。如果是,则它没有改变 - 从 HashMap 中删除它。
最后, HashMap 中仍保留的所有条目都已被删除。
这确实假设具有此特定名称服务器域的 HashMap 适合内存,但在合理的机器上和合理的名称服务器上,这似乎是一个合理的假设......
关于Linux:比较大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26672253/