这是个很有意思的问题,我认真思考和尝试了两三天,找到了两个解决方案.
可执行程序及简单说明见 github 6.2TB-20.3B-dedup.
由于没有合适的硬件条件,因此没有做全量 203 亿数据的测试,仅测试了 20 亿行.
测试步骤:
[ol]
./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 亿行数据是没问题的.
[/ol]
给出的两个可执行程序都是基于 hash 的思路去重的.
为避免被白嫖,所以只给出了可执行程序,不提供源码,见谅.