对每行一个字符串的20GB文件进行排序

Kir*_*ira 6 sorting

在Gayle Laakman的书Cracking the Technical Interview的第11.5节中,

"想象一下,你有一个20GB的文件,每行一个字符串.解释你如何对文件进行排序"

我最初的反应正是她提出的解决方案 - 通过读取X mb的数据,对文件进行排序,然后将其写入磁盘,将文件拆分为更小的块(兆字节).最后,合并文件.

我决定不采用这种方法,因为最终合并将涉及保留主存中的所有数据 - 我们假设这是不可能的.如果是这样的话,这个解决方案究竟是如何实现的?

我的另一种方法是基于这样的假设:我们拥有接近无限的磁盘空间,或者至少足以容纳我们已有数据的2倍.我们可以读入X mb的数据,然后为它们生成散列键 - 每个键对应一个文件中的一行.我们将继续这样做,直到所有值都经过哈希处理.然后我们只需要将该文件的值写入原始文件.

让我知道你的想法.

Sah*_*tor 4

http://en.wikipedia.org/wiki/External_sorting更详细地解释了外部排序的工作原理。它通过解释如何通过读取已排序块的块(而不是同时读取所有已排序块)来执行 N 个已排序块的最终合并,解决了您最终必须将整个 20gB 放入内存的担忧。