上周我遇到一个需要处理大文件的场景,需要遍历大文件,并且对数据进行一定的处理。由于这批数据对时效性要求较高,所以当时我编写的程序是希望运行地越快越好,所以我在编程的过程中对程序进行一次一次的优化,最终从开始时需要运行8小时到现在只需运行50分钟,算是达到了需求。
当然,你可能会说一开始的程序写得太烂,所以导致运行太紧,无所谓啦,这并不是重点。实际上,很多人第一次写程序都很难按预想那样写出简单高效的代码片段,只是有的场景对性能要求并不高,所以有的人看着自己的程序能运行后就不再进行优化了。其实,绝大多数程序都是有优化空间的,并且还有很大的优化空间,这个空间指的是时间和空间。
废话不多说,我把这次优化的过程和思路总结为8个点,分享出来,希望能对大家有所帮助。
1.需求
大数据时代,处理大量数据成为了不少程序员的家常便饭。那么多大的数据可以称为大数据呢?对于数据量,很难用一个确定的量去描述其界限,我理解大数据不仅仅是数据量大,还应该具有数据复杂的特性,比如维度高、字段多。
我平时处理的数据并不是大到磁盘都存不下那种,最多就是亿的量级。此次处理的数据是一个文本的大文件,数据量不到一亿,占用磁盘空间几百GB,它是行列结构,即每一行数据用tab键分割,有不到100个字段,其中有部分字段是json,且这个json异常复杂,一条大的数据可能会占用好几MB的空间。
我要做的事情很简单,最费劲的就是在每一条数据的大json串中增加一个字段,这个字段经过了一些复杂的计算。简单来说就是写程序遍历一遍这个文件,