如何对大文件进行排序(不适合RAM)

时间:2014-06-19 21:19:21

标签: algorithm sorting bigdata

假设有一个算法X,需要2个步骤才能最终输出到文件。

  1. 收集数据
  2. 排序数据
  3. 我们还要说收集的数据太大而无法保存在RAM中,并在第2步采取行动之前写入文件。

    例如,获取包含数字的500GB文件,作为步骤1的输出。每行一个数字。第2步必须按升序对行进行排序。

    第2步如何在不读取输入文件的情况下有效地对数字进行排序?

2 个答案:

答案 0 :(得分:1)

最有效的方法是将交换空间增加500 GB并进行单一排序,让操作系统内存管理器处理缓存。

另一种方法是将数据分成适合的部分,例如250个2GB文件。对每个进行排序,然后对结果进行合并排序。

答案 1 :(得分:1)

" Gnu CoreUtils"可用作源代码,或内置于Linux发行版中的可用于Windows的预编译,包含Gnu拆分和Gnu排序例程。

如果您的数据可以排列成每个分类记录在一个单独的行上,那么split函数会将一个大文件拆分成多个较小的文件。每个较小的文件可以使用Gnu排序函数在内存中单独排序,最后所有排序的较小文件可以合并排序回一个大文件,另一个选项为Gnu sort。

http://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html Interview puzzle: Sorting a million number input with limited memory