这是个很有意思的问题,我认真思考和尝试了两三天,找到了两个解决方案.
可执行程序及简单说明见 github 6.2TB-20.3B-dedup.
由于没有合适的硬件条件,因此没有做全量 203 亿数据的测试,仅测试了 20 亿行.
测试步骤:
./gen-20.3B-lines.sh > 20.3B.txt
生成测试数据, 可修改脚本第 3 行 B=203
为你想要的数据量
./dedup-use-more-mem /path/to/20.3B.txt lines
lines 的单位是亿行,比如要测试 20 亿行,那就是 ./dedup-use-more-mem 20.3B.txt 20
这个解决方案处理 203 亿行数据需要内存约 272GB,超出了但是很接近原帖的要求.
./dedup-use-less-mem /path/to/20.3B.txt lines
用法同上,但是这个解决方案用的内存要少一半,所以如果有 256GB 内存,那么处理 203 亿行数据是没问题的.
给出的两个可执行程序都是基于 hash 的思路去重的.
为避免被白嫖,所以只给出了可执行程序,不提供源码,见谅.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.