我需要合并大约30个gzip-ed文本文件,每个文件大约压缩10-15GB,每个文件包含多行记录,每个记录都由同一个键排序。这些文件驻留在NFS共享中,我可以从多个节点访问它们,并且每个节点都有自己的/tmp
文件系统。最快的方法是什么?有效合并排序文件
一些可能的解决方案:
A.一切交给sort -m
。要做到这一点,我需要通过awk
/sed
/grep
传递每个输入文件,将每条记录折叠成一行,并提取一个sort
可以理解的密钥。所以,我会得到类似
sort -m -k [...] <(preprocess file1) [...] <(preprocess filen) | postprocess
B.瞧到蟒的heapq.merge
。 C.编写我自己的C代码来做到这一点。我可以合并在小批量的文件,使一个OMP线程每个输入文件,一个用于输出,和一个实际上做在RAM中的合并等
选项上述所有的:
d 。在比赛中一次合并几个文件。 E.为此使用多个节点,在节点之间复制中间结果。
你会推荐什么?我对二级存储效率并没有太多经验,因此,我很难估计其中的哪一个会发挥作用。
你有没有考虑过将问题更接近它起源的地方?例如。如果您的文本文件是面向行而不是面向记录(多行),那么您可以在不进行预处理的情况下执行合并排序。 – Jens 2011-08-26 12:25:44