2

我正在寻找从磁盘读取顺序文件的最快方法。我在一些帖子中读到,如果我使用例如 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

真的有可能提高读取压缩顺序文件而不是未压缩文件的性能吗?我究竟做错了什么?

4

2 回答 2

2

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

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

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

显然,在进行基准测试时还需要考虑其他影响。例如,HDD 的寻道时间比 SSD 大几个数量级,在糟糕的情况下,它可以成为时序的主导部分,将任何带宽优势降低到零。

于 2013-11-12T13:45:00.373 回答
0

这取决于磁盘的速度与解压缩的速度和空间节省。我相信您可以将其放入公式中。

真的有可能提高读取压缩顺序文件而不是未压缩文件的性能吗?我究竟做错了什么?

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

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

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

于 2013-11-05T14:15:08.863 回答