首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

1个G左右的文本文件,每行一个记录,现对每条记录取hashcode()%1000后分割成1000个文件,如何分割效率高

2013-09-28 
1个G左右的文本文件,每行一个记录,现对每条记录取hashcode()%1000后分割成1000个文件,怎么分割效率高?现在

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.

热点排行
Bad Request.