【2017年整理】java对大数据量文件内容的多线程读取和排序

上传人:豆浆 文档编号:990250 上传时间:2017-05-24 格式:DOC 页数:5 大小:23KB
返回 下载 相关 举报
【2017年整理】java对大数据量文件内容的多线程读取和排序_第1页
第1页 / 共5页
【2017年整理】java对大数据量文件内容的多线程读取和排序_第2页
第2页 / 共5页
【2017年整理】java对大数据量文件内容的多线程读取和排序_第3页
第3页 / 共5页
【2017年整理】java对大数据量文件内容的多线程读取和排序_第4页
第4页 / 共5页
【2017年整理】java对大数据量文件内容的多线程读取和排序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】java对大数据量文件内容的多线程读取和排序》由会员分享,可在线阅读,更多相关《【2017年整理】java对大数据量文件内容的多线程读取和排序(5页珍藏版)》请在金锄头文库上搜索。

1、java 对大数据量文件内容的多线程读取和排序,该怎么处理java 对大数据量文件内容的多线程读取和排序1.Generate a random text file, which contains at least 100 Million lines. Each line must contain over 100 characters.2.Compose a Java program to sort the file within a standard qualified time (time for data IO is also counted). Less running time us

2、ed, the performance is better. The program MUST NOT consume memory over 512M Bytes, and the usage of CPU is not limited.各位大侠,大家好,我现在有个棘手的题目,请大家帮忙,有满意答案后可给分题目翻译入下:1:生成一个随机的文本文件,其中包含至少 10 亿行,每一行必须包括 100 个字符。2:编写一个 java 程序,对此文本内容进行排序,排序计时,时间越少性能越好,内存不得大于 512MB,CPU 满意限制。个人愚见:可以考虑外部排序中使用线程来提高运行效率(cpu 没有限

3、制),到文件太大需分割(使用缓存)。如何组织好一个程序还望高手指教。最好有程序。谢谢了。-解决方案-先翻译准确了,100M 是 1 亿 -解决方案-感觉楼主的需求还没有描述完全,问题漏洞太多。1.生成这样的文件,每行的信息内容是什么,是否包含格式?2.排序依据是什么,如何排序。3.排序结果是什么,如何体现。我自己臆测下你这个题目锁涉及的难点吧。1.文件过大,不可能一次性 load。基于效率问题,批量读取,控制 buffer大小提高效率。如果是 xml 文件就使用 Sax 解析方式,基于流。2.排序后结果统计非常麻烦,如果是把排好序的文件重新生成难度就体现出来了了,如何插入排序方式无需整理结果文

4、件,但需要遍历原始 10 亿*10 亿次。需要人为策略优化。我个人优化思路如下:1. 读取文件基于流,每次读一行,自行判断换行符号,将排序方式编码成权计算,计算出比较权值。形成 文件流 byteoffset:length:行号:权值 信息。将索引信息存放内存,因为数据量小不会耗费大量内存。(该过程可以通过 String buffer 来缓存一定数量的 lineString 信息文件流 offset,length,起用多线程并发并发计算权值)2. 对权值进行散列,适当控制散列堆大小,散列到不同的散列堆,然后进行排序。一个堆即一个具备排序功能的链式结构。通过权值散列到不同的排序堆堆。3.通过 ra

5、ndeAccessFile 读取源文件,输出排序文件。如果排序文件可以分多个文件输出,可以依照排序堆,并给输出文件命名。sorted_1.txt sorted_2.txt . sorted_n.txt,这样在写文件时可以使用多线程进行提速。-解决方案-IO 操作无法使用多线程,IO 操作的并发率为 0,也就是说不支持并发。使用多个线程读写文件,比单个线程会更慢,因为带来了更多的寻道时间。 -解决方案-探讨OS 有的应该可以限制文件最大长度吧。这么大的文件,应该早就进行人为控制大小的切分,如果这是个面试题考考反映就合理了。一切皆可假设。-解决方案-这个问题我也遇到过,我们公司考试考了一个这样的题

6、,但是题不太一样,那是一个移动号码排序,139 号码段,每天要把前面放出的号和当天放出的号合并成一个文件,并排序,以前放出的号没有说已经排好序,手机号码 11 位,去除前面 3 位还有 8 位基本上快到 1 亿,号码是一行一个号,txt 格式,我这里给你一个思路,可以用内存映射,这种方式应该是 java 里能读的最大文件的方式了,这里只是读,另外就是排序,因为不知道你的文件内容是什么,所以不太好说,我就说移动这个吧,我们把文件读出来的时候对他分拆,设一个段,每一个段一个文件比如,以 139001(139001*)开头的写一个文件,以 139002(139002*)开头的写一个文件这样分成若干个小文件,再排序,最后把这几个文件合并就可以了。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号