Node zlib - 内部应用程序数据库

时间:2018-03-18 16:00:46

标签: javascript node.js compression gzip zlib

我想知道压缩相对较小的字符串,介于1到10kb之间,用于存储在我的服务器上。在实际请求期间,服务器和接收客户端应用程序将不使用我选择的压缩。压缩仅用于节省服务器上的存储空间。

在这种情况下,是否真的需要使用gzip及其标题?我可以用deflate吗?也许甚至放弃原始,因为我知道所有情况下字符串的编码?

我看到反对deflate的#1参数是浏览器中不一致的实现,但在我的情况下这似乎无关紧要。

我的想法出错了吗?

如果deflate是gzip的可行替代品,那么deflate raw呢?

2 个答案:

答案 0 :(得分:2)

首先是一些术语。 Deflate是指原始deflate格式,如RFC 1951中所述。因此“deflate”和“deflate raw”之间没有区别。您可能正在考虑错误命名的“deflate”HTTP编码,它实际上并不是deflate,而是zlib,如RFC 1950中所述。

其次,将小字符串压缩为独立的,可解压缩的文件,这似乎是你所暗示的,在大多数情况下会导致相当差的压缩。你应该连接这些字符串,以及你需要能够再次将它们分开的任何结构,至少大约1 MB级别并对它们应用压缩。您没有说明您希望以后如何访问这些字符串,这需要在此类方案中加以考虑。

第三,即使压缩1 KB到10 KB范围内的小字符串,gzip,zlib和deflate之间的差异在所占用的空间中也基本可以忽略不计。对于三种格式,标题和尾部分别占18个字节,6个字节和0个字节。所以,如果它是你所关注的空间,那么离开gzip几乎没什么好处。

第四,压缩时不计算CRC-32或Adler-32校验值可能有一个小的速度优势(分别用于gzip和zlib),但与压缩时间相比,它可以再次忽略不计。 / p>

答案 1 :(得分:1)

在您的Web应用程序内部,您可以使用任何压缩 - 如果您将未压缩的数据发送到HTTP客户端,那么在线路上没有任何区别。

然而,这样做总是需要权衡 - 服务器的实现将更加复杂,并且您需要更多的CPU能力。它也只有在数据是可压缩的情况下才有效,并且大型对象(例如视频文件/磁盘映像)往往会被压缩。

对于许多应用程序,磁盘空间不是问题,低延迟和最小复杂性是更重要的问题。如果您的应用程序存储了大量可压缩数据,这些数据很少被请求,那么这种压缩方案可能确实是个好主意。

但在实施复杂代码之前,请先计算它是否真的值得权衡。还要考虑文件系统级压缩(启用非常简单,实现是其他人的问题)。如果您的目标是节省空间,您还应该考虑各种算法,从LZ4(非常快)到gzip / deflate / deflateRaw(所有相同,只是不同的标题)到LZMA(非常慢但非常有效)。