怎么快速的实现大小为3G的txt文件的读取和处理
如何快速的实现大小为3G的txt文件的读取和处理
LZ学生党,有个问题想请教大家:
现在需要处理一个9万行,每行2001个浮点数的txt文件,大小约为3G。
需要进行的处理是:对每一行的后2000个数字进行从大到小排序。
我现在用的办法是:用ifstream进行读取,读出一行后存在一个vector<float>中,然后用快速排序进行处理。然后再读一行,再处理。但是我这样完成全部9万行的排序需要大约1到2分钟。
因为我的整个流程中需要执行约30万次的排序操作,每次会有一个在程序中生成的不同的2000维的浮点数向量,然后9万*2000的矩阵的每一列乘以对应的2000维向量中的一个数然后再分别每一行进行排序。
假如按照我之前的方法,每次读入一行,然后再乘以2000维向量对应的数后再排序,那么30万次需要的时间太长了。
我想向大家请教一下,我整个流程中最耗时的是不是读取文件的IO操作?我应该如何改善呢?
------解决思路----------------------
90000*2001*4=720360000 Byte
720360000/1024=703476.5625 KB
703476.5625 /1024=686.988830 MB
------解决思路----------------------
为什么不放数据库里面加索引呢?
<1000个元素,冒泡排序
<100000个元素,qsort函数
<10000000个元素,放数据库中,建索引,(B+树排序)
≥10000000个元素,没用到过。
------解决思路----------------------
这种事情,交给数据库去做是最合理的。
也许不是最快,但是够快。关键是够可靠。
就说你考虑下断电保护,你自己写代码就别玩了。
------解决思路----------------------
不用文件,3g 数据直接放在内存里就行了。
另外,如果向量总是右乘矩阵,把矩阵按照列主元格式放在内存里。
还有,最好先实测一下,到底慢在哪里了。
LZ学生党,有个问题想请教大家:
现在需要处理一个9万行,每行2001个浮点数的txt文件,大小约为3G。
需要进行的处理是:对每一行的后2000个数字进行从大到小排序。
我现在用的办法是:用ifstream进行读取,读出一行后存在一个vector<float>中,然后用快速排序进行处理。然后再读一行,再处理。但是我这样完成全部9万行的排序需要大约1到2分钟。
因为我的整个流程中需要执行约30万次的排序操作,每次会有一个在程序中生成的不同的2000维的浮点数向量,然后9万*2000的矩阵的每一列乘以对应的2000维向量中的一个数然后再分别每一行进行排序。
假如按照我之前的方法,每次读入一行,然后再乘以2000维向量对应的数后再排序,那么30万次需要的时间太长了。
我想向大家请教一下,我整个流程中最耗时的是不是读取文件的IO操作?我应该如何改善呢?
------解决思路----------------------
90000*2001*4=720360000 Byte
720360000/1024=703476.5625 KB
703476.5625 /1024=686.988830 MB
------解决思路----------------------
为什么不放数据库里面加索引呢?
<1000个元素,冒泡排序
<100000个元素,qsort函数
<10000000个元素,放数据库中,建索引,(B+树排序)
≥10000000个元素,没用到过。
------解决思路----------------------
这种事情,交给数据库去做是最合理的。
也许不是最快,但是够快。关键是够可靠。
就说你考虑下断电保护,你自己写代码就别玩了。
------解决思路----------------------
不用文件,3g 数据直接放在内存里就行了。
另外,如果向量总是右乘矩阵,把矩阵按照列主元格式放在内存里。
还有,最好先实测一下,到底慢在哪里了。