假设我需要通过一个相当快的网络将一些数据从一台计算机发送到另一台计算机……例如标准的 100Mbit 连接(~10MB/s)。我的磁盘驱动器是标准 HDD,因此它们的速度介于 30MB/s 和 100MB/s 之间。所以我猜即时压缩数据可能会有所帮助。
但是...我不想受到 CPU 的限制。如果我选择一种对 CPU 要求较高的算法,传输速度实际上会比没有压缩时更慢。
对于 GZIP 和 BZIP2 之类的压缩器来说,这很困难,因为您通常会为整个传输设置一次压缩强度,而我的数据流有时很容易压缩,有时很难压缩 - 这使得过程不太理想,因为有时我没有使用完整的 CPU,有时带宽未得到充分利用。
是否有一个压缩程序可以适应当前的 CPU/带宽并达到最佳状态,从而使传输达到最佳状态?理想情况下适用于 Linux,但我仍然对所有解决方案都很好奇。我希望看到与 GZIP/BZIP2 解压缩程序兼容的东西,但这不是必需的。
因此我想优化总传输时间,而不仅仅是优化要发送的字节数。
另外,我不需要实时解压……实时压缩就足够了。目标主机可以在空闲时间稍后处理数据。我知道这不会有太大变化(压缩通常比解压更耗费 CPU),但如果有一个解决方案可以利用这个事实,那就更好了。
每次我传输的数据都不一样,我真心希望这些一次性传输尽可能快。因此,我不会因为更强的压缩而更快地进行多次传输。
谢谢,
答案1
答案2
嗯,这个问题已经存在一年多了,所以可能会被忽视:
无论如何,谷歌最近发布了Snappy这可能正是您正在寻找的,即:
[...] 它不追求最大程度的压缩,也不追求与任何其他压缩库的兼容性;相反,它追求极高的速度和合理的压缩。例如,与 zlib 的最快模式相比,Snappy 对大多数输入的速度要快一个数量级,但生成的压缩文件却要大 20% 到 100% [...]
它是用 C++ 实现的,并且可以与 C 和一系列其他语言绑定。