有效地合并已排序的文件

时间:2011-04-20 19:43:29

标签: sorting merge large-files

我需要合并大约30个gzip-ed文本文件,每个文件大约10-15GB压缩,每个文件包含多行记录,每个记录按相同的键排序。这些文件驻留在NFS共享上,我可以从多个节点访问它们,每个节点都有自己的/tmp文件系统。什么是最快的方式呢?

一些可能的解决方案:

一个。全部留给sort -m。为此,我需要通过awk / sed / grep传递每个输入文件,将每条记录折叠成一行并提取sort可以理解的密钥。所以我会得到像

这样的东西

sort -m -k [...] <(preprocess file1) [...] <(preprocess filen) | postprocess

B中。查看python的heapq.merge

℃。编写我自己的C代码来执行此操作。我可以小批量合并文件,为每个输入文件创建一个OMP线程,一个用于输出,一个实际在RAM中进行合并等。

以上所有选项:

d。在锦标赛中一次合并几个文件。

电子。为此使用多个节点,在节点之间复制中间结果。

你会推荐什么?我没有太多关于二级存储效率的经验,因此,我发现很难估计其中任何一个如何执行。

1 个答案:

答案 0 :(得分:2)

如果您选择涉及heapq.merge的解决方案B,那么您将很高兴地知道,Python 3.5将根据docs.python.org向heapq.merge()添加key参数,bugs.python.orggithub.com。这将是解决您问题的绝佳方法。