NodeJS zlib流中的内存使用情况

lokaqttq  于 2023-03-17  发布在  Node.js
关注(0)|答案(1)|浏览(176)

我可能是错的,但这就是我对Node的createGzip()的理解:

  • 我可以stream.write()-它在流中累积数据,
  • “压缩”过程只在调用stream.end()时发生-然后Gzip根据流中的内容执行它的魔术并卸载所有内容。

这需要相当大的内存量,因为在调用end()之前,stream必须保存所有内容。
我是否可以用某种方法在少量数据上“训练”gzip(我的意思是训练它如何压缩数据。我的数据在整个数据集中都有类似的模式),然后不需要等待stream.end()就可以通过它传输所有内容?
我想压缩~ 100 GB的数据和流只是无法积累那么多,由于运行时的内存限制。

kxxlusnw

kxxlusnw1#

Node的zlib实现就像一篇文章中描述的那样工作,它在调用end()之前在缓冲区中累积所有数据。
一个解决方案是使用pako包,这是定制的zlib Package 器。
它不支持流的开箱即用,但是你可以覆盖onData()方法,很容易地把它转换成流,这样你就可以实现真正的流压缩。

相关问题