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

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

相关文章:

  • 2021-11-06
  • 2022-12-23
  • 2021-12-28
  • 2021-06-06
  • 2022-02-26
  • 2021-10-20
  • 2021-07-18
  • 2022-12-23
猜你喜欢
  • 2021-05-18
  • 2022-12-23
  • 2021-07-25
  • 2022-01-05
  • 2021-12-21
  • 2021-10-31
  • 2022-12-23
相关资源
相似解决方案