疯了!请csdn的高手帮解 小弟现在做一个文件分析程序,目标是把300多每个2G的文件进行按行数据筛选,请问高手大约需要多长时间能读完?怎样能提高读取的速度? 我处理完发现需要一周左右能筛选完成,速度很致命,小弟黔驴技穷,请大家指点如何能提高目前这种需求下的效率?严重感谢大家! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 多线程是种思路,可是需要轮番等待cpu时间,线程多了和单线程执行的效率是差不多的 多线程也需要等待cpu时间啊,这和单线程时间上会有很大区别吗? NIO,这么大的io操作,你可以看看NIO包,内存映射的做法,然后 多线程跑就是了 技多不压身,学吧,有java基础很容易上手。与其没有办法,还不如学写新东西,至少能有点其他思路 在Java中提供的容器好像是很难满足这种大数据的出理,能否借助第三方的组件来处理呢? 加搜索引擎呀,,兄弟,呵呵,,开源的有luence呀,,不然会搞死电脑的,呵呵 有人说使用NIO的内存文件映射,可是我现在需要按行读取文件以便分析,在NIO中没有找到有readLine()方法,是不是内存映射机制不能readLine()呢?期待大家给出答案,分不够小弟再加。 可以考虑用多线程,因为I/O太频繁,可以提高CPU利用率。 到sun网站上给他们发个mail,告诉他们,jdk的io操作太烂了,300个2G文件竟然要处理1周,然后把你的问题描述下,翻译下,过几天肯定有人给你解答了 看电脑性能和你拥有的电脑台数。如果计算机有多台,弄个分布式程序,多台电脑一起处理。如果内存很大,可以把数据尽可能多的先读到内存中缓冲起来,并利用多线程不让磁盘停下来(注意:不是多个线程一起操作磁盘)然后尽可能用nio提供的API尽可能顺序读取,不要随机读取 现在的处理方式就是按行扫描数据找到符合需求的,因为需要从头扫到文件尾,而每个文件都有三千万行,所以处理上的改进是没有扫描余地了,只能通过NIO来提高读取速度,那么小弟现在就需要一个如何把一个2G的文件分块映射到内存的代码。谢了! File file = new File("filename"); BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file),10*1024*1024); // 用10M的缓冲读取 可以用缓冲读取,占用内存又可以自己定义http://www.java2000.net/p188 内存映射文件直接将文件的地址映射到进程的地址空间中,那么操作文件就相当于在内存中操作一样,省去了读和写I/O的时间;而普通的IO操作(READFILE,WRITEFILE),这个过程是很慢的 先不要考虑技术,先考虑一下算法,找出分析文件的通性我以前也遇到过类似的事情几乎每天都要读几个2,3G的文件,跟你不一样的是我要查特定字段所以我把文件分拆之后用grep,分拆时用的FileChannel这个类,她读写相对较快2G的分拆几分钟吧,后来发现用二分法查几乎几秒就出来了所以最好是你根据你要分析的内容作算法,这样比较应急搜索引擎有一个学习过程,有时间最好掌握一个 再加上几个fuck比如fuck sunfuck javafuck java.io.*; 这毕竟是300个2G的文件我想算法的效率再高,也是抵不过时间的考验的,lz 50个小时能够处理完已经很不错了。。 关于方法覆盖的返回值类型的疑问 调用main()函数问题 希望大家可以帮我看看这个程序 怎么统计某个页面地址的访问量? 关于选项卡容器的问题,请教高手 字符串的拆分问题 怎么查java 的帮助 在java中怎么样获取鼠标左键!如何将物体旋转后的效果在相同位置显示出来?(图形是三维) 我是JAVA初学者 ,安装JAVA出来安装SDK 还要装什么?小弟谢了 关于JAVA与SQL SERVER 2000中图片的存取问题 lomboz eclipse 的小问题 含有扩展jar源的JAVA程序如何打包成jar后可以双击运行
能否借助第三方的组件来处理呢?
看电脑性能和你拥有的电脑台数。
如果计算机有多台,弄个分布式程序,多台电脑一起处理。
如果内存很大,可以把数据尽可能多的先读到内存中缓冲起来,并利用多线程不让磁盘停下来(注意:不是多个线程一起操作磁盘)
然后尽可能用nio提供的API
尽可能顺序读取,不要随机读取
现在的处理方式就是按行扫描数据找到符合需求的,因为需要从头扫到文件尾,而每个文件都有三千万行,所以处理上的改进是没有扫描余地了,只能通过NIO来提高读取速度,那么小弟现在就需要一个如何把一个2G的文件分块映射到内存的代码。谢了!
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file),10*1024*1024); // 用10M的缓冲读取 可以用缓冲读取,占用内存又可以自己定义
http://www.java2000.net/p188
我以前也遇到过类似的事情
几乎每天都要读几个2,3G的文件,跟你不一样的是我要查特定字段
所以我把文件分拆之后用grep,分拆时用的FileChannel这个类,她读写相对较快
2G的分拆几分钟吧,后来发现用二分法查几乎几秒就出来了
所以最好是你根据你要分析的内容作算法,这样比较应急
搜索引擎有一个学习过程,有时间最好掌握一个
比如
fuck sun
fuck java
fuck java.io.*;