1. 场景描述
16G内存,32核CPU,2T的硬盘,实现500G文件的排序处理,你怎么设计
2. 考察要点
- 内存不足
- 并行执行、压榨CPU
- 空间复杂度支持O(n)-可归并
- 要求时间复杂度尽量低
3. 解决方法
步骤
- 500个文件分成 50份 每个10G内部归并排序
- 采用归并的思想,每次读取两个文件的头数字(已经有序)进行排序,合并成一个大文件。
- 多线程去执行归并操作
4. 性能提升
1). 2步骤每次可以批量取出多个,减少IO,但是额外占用的空间就会多,需要和多线程资源进行权衡。
2). 批量写,同批量读一样,需要额外占用空间
网友评论