我们有我们的日志文件gzipped节省空间。 通常我们保持压缩,只是做
gunzip -c file.gz | grep 'test'
find重要的信息,但我们想知道是否更快地保持文件未压缩,然后执行grep。
cat file | grep 'test'
关于gzip是如何工作的,有一些讨论,如果将它读入内存并解压缩,那么第一个将会更快,但是如果不是,那么第二个会更快。 有谁知道如何gzip解压缩数据?
捕获未压缩的文件总是会更快,因为没有与之相关的开销。 即使你不写一个临时文件,你也要通过解压缩动作来完成CPU。 如果你经常访问这些文件,如果你有足够的空间,最好保持它们不压缩。
也就是说,将数据转储到标准输出(gunzip -c,zcat等)不会触发写入临时文件。 数据直接传送到grep命令,该命令将未压缩的stream视为自己的标准。
关于LZ *编码的维基百科文章在这里: http : //en.wikipedia.org/wiki/LZ77_and_LZ78 。
一如往常,没有什么比实际测量更胜一筹
你的里程可能会有所不同,但在我的系统上, grep已经解压缩的文件需要大约三分之一的时间pipe道zcat或gunzip grep做。 这并不奇怪。
您也可以用lzo替代gzip来提高性能。
使用LZO可以使事情变得更快(较小的磁盘input – 输出和很less的压缩CPU开销)
使用压缩实际上可以为磁盘提供更快的吞吐量,但这取决于许多因素,包括使用的压缩algorithm以及您正在移动的数据types。 例如, ZFS 严重依赖于这个假设 。
gzip会将整个文件解压到一个临时文件,并在最后重命名(标准的gzip -d myfile.gz ),或者根本不使用任何临时文件,一次读取一些压缩数据块,在stdout上吐出未压缩的数据gzip -d -c... )。
在现代系统上,我怀疑是gunzip | grep 另一方面, gunzip | grep可能比查找未压缩的文件更快 gunzip | grep将永远赢得解压缩文件,然后刷新未压缩的一个:)
gzip -dc | grep foo(或gunzip -c)| grep foo写入一个pipe道。 pipe道是如何实现的取决于你的操作系统,但通常它会留在内存中。 正如其他人所指出的,由于解压缩压缩数据所花费的时间,所以对未压缩文件的刷新总是会更快。 使用不同的压缩程序可能会或可能不会提高性能; 你可以随时测量它。
取决于文件大小:当I / O占主导地位时,执行解压缩的CPU花费比文件传输更less的时间。 I / O是否占主导地位主要取决于CPU,存储系统以及它们之间的带宽的相对速度。
而且,另外, grep -Z又名zgrep也很方便。