10G数据,1G内存排序问题

将数据切分成n段,保证每段数据的大小在内存中放得下,然后将n个段的数据放到n个节点上进行并行计算,对计算的结果做多路归并,或者维护一个大小为n的小根堆,第一次从n个数据段中取第一个数据放入堆中,然后拿出最小的元素放入最终的文件中,然后从刚才从堆中取出值的文件中再取一个值,循环,直到将所有的数据排完。但是这样做存在一个问题,每次从n段文件中取数据比较耗时,这些数据可能来自于网络传输或者文件,通常可以将n段数据的前一批数据(做缓存)读入内存。各编程语言都有对堆的实现一般叫PriorityQueue(优先队列)。做缓冲区可以考虑用Iterable接口,用这个接口堆只管next就可以了,不需要考虑维护缓存的问题。
10G数据,1G内存排序问题

图片地址:https://blog.****.net/CleverCode/article/details/81743736