有1万个文本,每个3-15M,需要逐行读,解析有用信息,写入sqlite中。怎么读和写效率高。多线程也试了试,数据并行,还是有些慢。怎么能进一步提高效率。单机作战不是分布式。还就就是sqlite为单写数据库,多线读写入sqlite中需要加锁,也影响一定的效率。我sqlite原因主要是为了嵌入式,不用安装数据库。请高手赐教,非常感谢!
性能优化就是考验一个人的耐心
主要是还读文件用的时间,文件都不怎么大主要是多,70%时间用在这块;30%时间在sqlite这块,插入sqlite开启事务批量插入,时间差不多,关闭sqlite同步,略有提高。
@CodeFish7: 提供一个思路,你可以试一下。
1万个文本 “ 主要是还读文件用的时间,文件都不怎么大主要是多,70%时间用在这块”
A 减少文本个数。
合并形成临时文本
(注意:文本大小和读取速度的平衡点,需要来测试多少M文本平均读取速度最大)
B 再读取临时文本
@CodeFish7: 文件IO,也就是磁盘的性能,通常是一个系统中最差的,
包括你的SQLite数据库,也是需要写入磁盘的。
所以基本上来说,多线程的用处很小。(多线程是CPU,不是磁盘)
简单来说,买一块好的SSD,你的问题就解决了。
或者读取的文件放在不同的物理硬盘上都能有所提升。
70%的线程用来都文本,10%的线程用来解析,20%的线程用来写入数据库
建立线程池,然后每个读文本一个线程;解析也是线程;写数据库也是线程。这样节省系统资源,效率也高一些。