什么场景让我们在传输之前压缩数据?

What are the scenario that makes us compress data before we transfer it?

我想知道为什么在某些情况下我们在上传文件到服务器之前需要应用文件压缩的​​原因。据我了解,一旦服务器收到压缩文件,就需要提取压缩文件以允许服务器读取文件内容。如果从许多客户端平台发送多个 Http POST,它肯定会消耗服务器的计算能力。

因此,据我所知,发送压缩文件的场景是上传备份文件、设置文件、仅服务器作为客户端平台备份的文件。请给我更多上传压缩数据的场景。

我认为下面的文章对这个问题给出了完美的解释:http://www.dataexpedition.com/support/notes/tn0014.html

内容如下:

压缩优缺点

简单来说,压缩就是一个用CPU个周期换取字节的过程。但交易并不总是好的。有时,您可能花费大量宝贵的 CPU 周期却收效甚微或一无所获。

在网络数据传输的上下文中,"Should I compress?"是一个常见的问题。但答案可能会变得复杂,这取决于几个因素。最重要的是要记住,压缩实际上会使您的数据移动速度变慢,因此不应在没有考虑的情况下使用它。

何时压缩效果好 压缩算法试图识别数据集中的大重复模式,并用较小的模式替换它们。理想情况下,这会缩小数据集的大小。出于网络传输的目的,移动的数据越少意味着移动数据的时间越短。

主要由纯文本或机器可执行代码组成的文档和文件往往压缩得很好。示例包括文字处理文档、HTML 文件、一些 .exe 文件和一些数据库文件。

在网络传输之前将许多小文件组合成一个存档通常比单独传输每个文件的速度更快。即使单个文件本身不可压缩,这也可能是正确的。许多存档实用程序都有选项可以将文件打包到存档中而不压缩,例如 "zip" 的“-0”选项。当您启用流式文件夹时,ExpeDat 会将文件夹的内容组合成一个数据流。

当压缩不好时 许多数据类型不可压缩,因为重复模式已被删除。这包括大多数图像、视频、歌曲、任何已压缩的数据或任何已加密的数据。

尝试压缩不可压缩的数据会浪费 CPU 时间。当您尝试高速传输数据时,CPU 时间对于网络传输可能至关重要。因此,通过使用毫无价值的压缩来减少处理时间,与关闭压缩相比,您最终移动数据的速度实际上要慢得多。

如果您使用压缩实用程序只是为了合并许多小文件,请检查禁用压缩的选项。例如,"zip" 命令有一个“-0”选项,可以将文件打包到存档中,而无需花时间尝试压缩它们。

在线与离线 许多传输机制允许您在传输数据时将压缩算法应用于数据。这很方便,因为压缩和解压缩是无缝发生的,用户无需执行额外的步骤。但这也有风险,因为任何 CPU 花在压缩上的时间都没有花在通过网络提供数据上。如果网络速度非常快,CPU 非常慢,或者压缩算法无法扩展,则启用在线压缩可能会导致数据移动速度比关闭压缩时更慢。即使数据是可压缩的,在线压缩也比不压缩慢!

如果您要多次传输同一数据集,最好先使用 Zip 或 Tar-Gzip 对其进行压缩。然后,您可以传输压缩存档,而无需占用 CPU 个网络处理周期。如果您打算加密数据,请确保先压缩数据,然后再加密。

隐藏压缩 您网络中的设备可能在您没有意识到的情况下应用了压缩。如果网络的 "speed" 似乎因不同的数据类型而改变,这一点就会变得很明显。如果当您传输已经压缩的数据时网络看起来很慢,但当您传输未压缩的文本文件时网络速度很快,那么您可以非常确定外面的东西正在为您做出压缩决定。

网络压缩设备很有用,因为它们可以减轻端点 CPU 的压缩负担。但它们也会产生非常不一致的结果,因为它们不适用于所有目的地和数据类型。网络级压缩也可以 运行 进入上面讨论的相同 CPU 权衡,导致一些文件移动速度比没有压缩时要慢。

如果您要测试网络速度,请尝试使用已压缩或加密的数据以确保结果一致。

我应该打开在线压缩吗? 对于压缩数据、图像、音频、视频或加密文件:否。

对于其他类型的数据,两种方式都进行测试,看看哪个更快。

如果网络速度非常快(每秒数百兆比特或更快),请考虑关闭在线压缩并在移动之前压缩数据。