【发布时间】:2018-12-03 17:39:57
【问题描述】:
我有以下场景:
- url文本文件A
- url文本文件B
每个文件的大小约为 4Gb。
我需要计算:
- A 中所有不在 B 中的 url
- B中所有不在A中的url
我在网上找到的所有 Java-diff 示例都将整个列表加载到内存中(使用 Map 或使用 MMap 解决方案)。我的系统没有交换空间,而且没有外部内存就无法做到这一点。
有没有人知道这个问题的解决方案?
这个项目可以在不占用大量内存的情况下进行大型文件排序https://github.com/lemire/externalsortinginjava
我正在寻找类似的东西,但用于生成差异。我将首先尝试使用该项目作为基线来实现这一点。
【问题讨论】:
-
BufferedReader?它们是文件中的许多“url”还是许多文本和一些url? => 将所有 URL 加载到内存中是一种解决方案吗? -
嗨。不幸的是,没有。我已经尝试过了,但我的云虚拟机太小,无法处理内存解决方案或任何内存映射。它只需要是外部存储器
-
从你描述的方式来看,你必须做大量的传球。
-
我上面提到的java项目中的外部排序能够以几秒钟的方式对这些文件进行排序。所以我认为一旦我提出算法,它就不会太可怕了。
-
每个文本文件中的所有 URL 是否都是唯一的?如果不是,每个文件中唯一 URL 的大小是多少?