读取顺序文件 - 压缩文件与未压缩文件

时间:2013-11-05 12:28:30

标签: c++ performance io compression lzo

我正在寻找从磁盘读取顺序文件的最快方法。 我在一些帖子中读到,如果我使用lz4压缩文件,我可以获得比读取平面文件更好的性能,因为我将最小化i / o操作。

但是当我尝试这种方法时,扫描lz4压缩文件给我的性能比扫描平面文件要糟糕。我没有尝试上面的lz4demo,但是寻找它,我的代码非常相似。

我找到了这个基准:  http://skipperkongen.dk/2012/02/28/uncompressed-versus-compressed-read/ http://code.google.com/p/lz4/source/browse/trunk/lz4demo.c?r=75

是否真的可以提高在未压缩文件上读取压缩顺序文件的性能?我做错了什么?

2 个答案:

答案 0 :(得分:2)

是的,可以通过使用压缩来改善磁盘读取。

如果您使用多线程阅读器,则最有可能发生这种影响:当一个线程从磁盘读取压缩数据时,另一个线程解码内存中的先前压缩块。

考虑到LZ4的速度,解码操作很可能在另一个线程完成读取下一个块之前完成。这样,您将实现带宽改进,与测试文件的压缩比成比例。

显然,在进行基准测试时还需要考虑其他因素。例如,HDD的寻道时间比SSD大几个数量级,在恶劣的环境下,它可以成为时间的主要部分,将任何带宽优势降低到零。

答案 1 :(得分:0)

这取决于磁盘的速度与减压的速度和空间节省。我相信你可以把它放到一个公式中。

  

是否真的有可能提高阅读压缩的性能   顺序文件在未压缩的文件上?我做错了什么?

是的,这是可能的(例如:一个1kb的zip文件可能包含1GB的数据 - 读取和解压缩ZIP的速度最快)。

对不同的算法及其解压缩速度进行基准测试。有压缩基准网站。还有专用的高速压缩算法。

您也可以尝试更改数据格式本身。也许切换到protobuf,它可能比CSV更快更小。