1个G左右的文本文件,每行一个记录,现对每条记录取hashcode()%1000后分割成1000个文件,怎么分割效率高?
现在就是新建1000个文件,然后逐行读取记录计算hashcode()%X后写入相应的文件中,试了下,估计几个小时都做不完。请问有什么比较好的方法?
------解决方案--------------------1. 根据你的内存容量设置两个超大缓存,读满第一个缓存
2. 处理第一个缓存的时候用另一条线程,主线程读取文件到另一个缓存
3. 另外建立1000个缓存,决定了每条记录的去向之后丢进相应缓存,缓存满了才写入文件
4. 最后把所有1000个缓存里剩下的写入文件
------解决方案--------------------1个缓存拿来暂时存放读取的文件,另一个是已经读取的文件,用于并行处理。
因为你读一条处理一条的话,磁盘寻道时间很久。如果你按顺序大量读取,磁盘速度会比较快。
1. Thread1: read file into buffer1
2. Thread2: process buffer2 if buffer2.remaining() > 0
3. swap buffer1 and buffer2 if buffer1 is full and buffer2 is empty
4. goto 1.