**等待强人解答超超大文件解析的问题

问题描述

小弟是新到咱们论坛的,听说这里牛人较多,现有个超出小弟能力的问题期待大家给出意见: 读取300多个每个2G的文件,每个文件都是5列N多行,由于需要从中选出某行某列的数,所以需要按行依次扫描,性能很低很低,所以想到了内存文件映射,但是好像内存文件映射没有读行的方法readLine();请大家帮忙分析下,如何能把FileChannel与readLine()结合呢? 所以请大家给小弟指点下迷津!!!严重感谢大家!!!问题补充:哦,我的业务逻辑主要是每个文件的行数都是一样的在30000000行左右,我需要每隔几十行取一次那一行规定列的数据。比如取第1000行,第2000行的数据,每行有五列,中间用空格分隔。

解决方案

内存映射文件用于解决多个进程共享数据,这么大的文件只要在硬盘上,怎么读都是慢。所以建议你用多线程+FileChannel来提高性能,至于readLine的结合,你可以参考 BufferedReader的做法,就是一个装饰模式,可以阅读JDK的源代码,它的注释非常清晰的。其实readLine也是一个byte一个byte的找,只是找到(c == 'n') || (c == 'r')作为一行的结束罢了。所以,如果频繁读取这些文件,则应该建立一个索引,把每个线程读取的position记下来。
解决方案二:
如果你的业务逻辑就如题所说,且不会经常变,那么针对你的文件结构自己建索引,可以做到比数据库快。数据库的优点是“综合效率”高且能够较灵活应付变化,如果追求速度还是要自己去设计算法。
解决方案三:
大文件读取,内存映射肯定是没用的。多线程会更慢。直接导入数据库才是王道。
解决方案四:
不知道你的文件是什么类型的小弟有个愚见,不知道可不可以存成xml形式的之后用xpath检索
解决方案五:
文件这么大,怎么可能一行一行找。。。肯定要索引下。怎么做呢。。。。我想到的办法是放到数据库里去,如果文件不是经常变动的话,可以把他映射到数据库里去,这个动作只要做一次就好了,以后就可以让数据库帮你找了。

时间: 2024-09-10 14:17:07

**等待强人解答超超大文件解析的问题的相关文章

*疯了!期待Eye牛人解答超超大文件分析问题!

问题描述 小弟是新到咱们论坛的,听说这里牛人较多,现有个超出小弟能力的问题期待大家给出意见:读取300多个每个2G的文件,每个文件都是5列N多行,由于需要从中选出某行某列的数,所以需要按行依次扫描,性能很低很低,所以想到了内存文件映射,但是好像内存文件映射没有读行的方法readLine();请大家帮忙分析下,如何能把FileChannel与readLine()结合呢?所以请大家给小弟指点下迷津!!!严重感谢大家!!!问题补充:哦,我的业务逻辑主要是每个文件的行数都是一样的在30000000行左右

调用WinApi实现超大文件分割

不多说了,10G+的Sql测试分割成功,每块大小不要超过1G就好了. //Code by Pnig0s1992 //Date:2012,3,18 #include <stdio.h> #include <Windows.h> #define MAXLENGTH 30 int main(int argc,char * argv[]) { LPTSTR lpFileName = "xxx.sql"; HANDLE hFile; struct FILEINFO { L

javascript-页面js文件解析执行过程

问题描述 页面js文件解析执行过程 在高性能javascript书中有如下讲解,感觉甚是不懂!如下:每个文件必须等到前一个文件下载并执行完成才开始下载.如下图:(http://img.ask.csdn.net/upload/201508/25/1440490986_104397.png) 疑问:一些外部引入的js文件不是不能被执行么,还有那些页面加载完后再执行的js文件,这里为什么是下载并执行呢!又晕了,求大神解答!感谢! 解决方案 这个要看你的htnl怎么写的,如果是外部js,那么肯定是先下载

htmlcxx中css文件解析中yyparse有内存泄露,哪位大神能不能帮忙看一下

问题描述 htmlcxx中css文件解析中yyparse有内存泄露,哪位大神能不能帮忙看一下 使用最新版的htmlcxx0.85版,把内部的css解析部分抽出之后,检测出内存泄露

用PHP读取超大文件的实例代码

去年年底的各种网站帐号信息的数据库泄漏,很是给力啊,趁机也下载了几个数据库,准备学学数据分析家来分析一下这些帐号信息.虽然这些数据信息都已经被"整理"过的,不过自己拿来学习也挺有用的,毕竟有这么大的数据量. 数据量大带来的问题就是单个文件很大,能够打开这个文件相当不容易,记事本就不要指望了,果断死机.用MSSQL的客户端也打不开这么大的SQL文件,直接报内存不足,原因据说是MSSQL在读取数据的时候,是一次性地将读取到的数据放在内存中,如果数据量过大,而内存不足,则会直接导致系统瘫掉.

删除Windows超大文件夹正确方法

  如果你的文件夹太大,或者文件的路径过深,特别是有太多小体积文件时,(由于要遍历所有文件路径和文件名)直接在资源管理器界面中删除文件夹的方式会非常耗时耗资源.而且在遍历海量超长路径和小体积文件时,Windows 资源管理器常常会 Hang 住甚至直接报错. 如果你遇到类似要删除上述类型文件夹情况,正确删除 Windows 中超大文件夹建议使用命令行方式进行操作,而不是直接使用资源管理器. del /f /s /q 文件夹名称 del 命令的参数我就不解释了,大家可以使用 /? 进行查看.

sax-xml文件解析时报错,久不得解

问题描述 xml文件解析时报错,久不得解 报错的语句:Document document = builder.parse(new Proxool().getClass().getResourceAsStream("/proxool.xml")); 这是我的xml文件: 我就郁闷了,求指点~ 解决方案 jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8 解决方案二: UTF-8改成utf8试

json文件解析。。。。。。。

问题描述 json文件解析....... [ {"id":"100","age":"1","name":"张三"}, {"id":"101","age":"2","name":"李四"}, {"id":"102","ag

html c++-如何读取本地html文件,并将该文件解析,根据解析的数据创建新的html

问题描述 如何读取本地html文件,并将该文件解析,根据解析的数据创建新的html 问题是这样的: 我在网上获取了别人的html源代码后,把源代码保存到本地html,然后通过什么样的方法读取到里面table的数据,再根据这些数据构建一个新的html文件,再另存到本地 相当于这么一个软件,输入时别人的html源代码,输出我重新整理好的html文件,不知道大家能不能懂--汗,我知道js是无法获得本地文件,所以只能依赖其他平台来处理html 请各位大侠给点思路,比如c++? 解决方案 java jso