外排序和归并排序

    大数据的排序和内存排序其实核心都差不多,只是大数据不能一次性的load到内存,所以就有了大数据处理的惯用手法“分治”和“归并”。这是处理大数据的屡试不爽的方法。将数据分片,交给不同的机器去处理,或者在同一台机器上分批处理(因为一次没法load)。

    我们举例来说明怎么分片排序(外归并排序),这里我们进行的是9路归并排序:

    比如,要对 9GB的数据进行排序,但机器上只有 1 GB 的可用内存时,外归并排序按如下方法操作:

    1. 读入 1GB 的数据至内存中,用某种常规方式(如快速排序、堆排序等方法)在内存中完成排序。

    2. 将排序完成的数据写入磁盘,文件大小约1GB

    3. 重复1,2,则产生了9个小文件(每个大小1GB),每个文件里的数据都是排好序的。

   下面开始归并:

   1. 从9个文件里各读出100MB数据(9个文件共占用了900MB内存,还有100MB内存作为输出缓冲区)。

   2. 对9路有序数据的第一个进行比较,得到最小的,输出到缓冲区,这个数据就是所有元素的最小值。

   3. 该路数据前移动,后一个自动成为队首数据;

   4.重复2和3,如果某一路队列空了,则从该路关联的文件里load,直到文件全部load完。

   5.如果缓冲区满,则写入结果文件中。

   6.全部数据处理完,排序完成!

你可能感兴趣的:(外排序和归并排序)