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



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

  1. <
  2. 排序数据/gh>

我们还假设收集的数据太大,无法在RAM中保存,并且在步骤2执行操作之前写入文件。

以500GB的文件为例,该文件包含数字,如步骤1所示。每一行一个数字。步骤2必须按升序对行进行排序。

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

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

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

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

:

  • 分裂:http://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html
  • 排序:http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
  • 访谈谜题:在有限的内存下对一百万个数字输入进行排序

最新更新