大批量文件处理的7条建议

最近因为项目须要,常常捣腾大批量的文档,期间也走过很多弯路。发现大批量文件处理这玩意,整很差就耗时,大部分时间都花在焦急的等待过程当中。随着经验的丰富,渐渐地也摸索出一些大批量文件处理的原则,分享在这里:

原则1:选择命令行,而不是GUI

例如一个文件夹,里面存储了百万数量级的文件,且包含大量子文件夹。如今要统计文件夹下全部文件的数量,最多见的作法是右键点击文件夹属性,查看文件数量。然而这样作每每直接致使Windows无响应。替代的作法是,选择使用命令行工具来统计,好比dos下的dir命令,或者使用windows下的linux命令行工具:unxutils,它能够在windows下模拟大部分linux的命令,用find . -type f|wc -l就能够快速统计。这样作不只比GUI下快出几倍,并且也不会出现“无响应”这样的不友好界面。

原则2:压缩存储和传输

有时候磁盘上要存储海量数据,将文件散步在磁盘块上,不只占空间,也耗网络传输时间。对于普通文本文件,通常压缩格式的压缩率都接近10%。若是要支持跨平台,可选择zip或者tar这样的通用格式。而传输整块大文件,也比传输海量的小文件,节省很多时间。即使是将压缩和解压缩时间考虑在内,这样作也比直接传输散开的文件快很多。

原则3:缓存经常使用信息

若是你的程序常常须要遍历一个文件夹下的全部文件进行处理,且文件集合稳定不变,系统花在遍历的开销很是大。这种状况下,你能够维护一个文件列表,系统只是在第一次生成列表的时候进行了一次遍历,而此后系统再也不须要再遍历文件夹,直接读取文件列表信息便可。然后者的代价远远小于前者。固然,也有不少状况下,经常使用信息常常是变化的,这就须要用到本文提到的第4条原则。

原则4:增量式修改信息

原则3中提到的文件夹若是常常存在变更,那是否是意味着每次仍是不得不从新遍历全部信息,以保证获得最新的文件夹信息?答案固然是否,除非在最坏状况下,几乎全部的文件都被更新了一遍,不然你就能够只修改变化的那部分信息,来避免从新计算的开销。好比文件夹天天增长当天的新数据,且删除7天前的数据,那你就只须要更新这两部分数据,而保留中间的6天数据。

原则5:并行处理

你们都有用下载工具下载文件的经历。若是你的宽带最高支持每秒200K数据的带宽,那么若是你如今进行的任务每秒只下载100K数据,你就应该再开几个任务,并行下载,直到总下载量达到每秒200K的上限为止。这样才能最大限度地利用带宽,作最多的事。固然一旦吞吐量到达瓶颈,再增长进程或线程不只不增长处理速度,还有可能致使资源死锁,枯竭。

原则6:减小I/O开销

读写I/O很是耗时,若是不是很必要,就不用作这些无谓的操做。好比不少软件都带有不一样级日志的开关。若是只是普通用户使用,就不须要保存不少详细日志信息,当发生故障须要诊断时,工程师能够打开日志开关进行调试。测试工程师在平时测试中也能够重定向日志,或者nohup。不只节省I/O,也能够保存足够的信息,进行错误跟踪。

原则7:选择批处理,而不是one-by-one的处理

好多软件都包含批处理的功能,经过给定的执行列表,批量处理。而不须要用户每次本身控制处理流程。好比wget软件,支持给定的URL列表下载。若是用户本身拆分URL列表,将其一一传给wget,每次传递都形成wget的一次启动和结束操做,形成无谓的开销。优秀的软件能够保证一次启动/结果来执行批处理。因此在使用任何软件前,先阅读一下帮助手册,看看有没有批处理的功能,保证你事半功倍。
相关文章
相关标签/搜索