时间自适应压缩工具

时间自适应压缩工具

我正在询问将大文件复制到远程服务器的场景。

一个最简单的情况是:

tar c myfile | ssh myserver tar x

如果网络连接速度很快,那么一切都很好。

在较慢的网络上我这样做

tar c myfile | bzip2 -1 | ssh myserver tar xj

-- 以 CPU 时间为代价提高传输速度。

当然,我可以使用压缩比,通常会尝试猜测正确的压缩比,这样我的 CPU 就不会太忙,网络也不会饱和。

是否有压缩实用程序或压缩标志可以告诉bzip2/ xz/...在输出缓冲区繁忙时尽可能多地压缩?

答案1

zstd --adapt

zstd压缩实用程序有一个打开自适应压缩的选项(该选项是在zstdv1.3.6 中添加的)。这会将压缩调整为“当前感知的 I/O 条件”。

请参阅zstd手册了解更多信息。

一个完整的管道可能看起来像这样:

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'

或者

tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'

如果您添加到管道中的-v第一个,您将得到一个进度指示器行,上面写着类似的内容zstd

(L7) Buffered :  32 MB - Consumed : 192 MB - Compressed :  72 MB => 37.50%

其中(L7)表示压缩级别。对于任何中等大量的数据,您会期望它会随着时间的推移而波动,这表明它zstd确实在适应 I/O 条件(并且可能也适应数据本身)。

相关内容