Compression 为大量类似数据包启动zlib压缩器?

Compression 为大量类似数据包启动zlib压缩器?,compression,zlib,deflate,Compression,Zlib,Deflate,是否可以通过向压缩器(或其他开源压缩引擎)提供一组公共字符串来“初始化”压缩器,以提高逐个压缩大量非常相似的文本包的效率 我正在尝试改进我的方案,以记录数百万个不仅高度冗余而且非常相似的XML数据包。通常,消息之间更改的字节数小于1%。然而,日志记录的目标之一是对半生不熟的客户端应用程序进行故障排除。这就是为什么我不能简单地去正常化消息或只提取显著信息的原因:消息必须完全按照它们通过电线的方式记录,一个字节一个字节 目前,利用消息间冗余的唯一方法是将大量消息捆绑到一个压缩包中,比如100或100

是否可以通过向压缩器(或其他开源压缩引擎)提供一组公共字符串来“初始化”压缩器,以提高逐个压缩大量非常相似的文本包的效率

我正在尝试改进我的方案,以记录数百万个不仅高度冗余而且非常相似的XML数据包。通常,消息之间更改的字节数小于1%。然而,日志记录的目标之一是对半生不熟的客户端应用程序进行故障排除。这就是为什么我不能简单地去正常化消息或只提取显著信息的原因:消息必须完全按照它们通过电线的方式记录,一个字节一个字节

目前,利用消息间冗余的唯一方法是将大量消息捆绑到一个压缩包中,比如100或1000,或者一整天的时间。然而,这将使日志逻辑方式对我的口味来说过于复杂,并且不那么健壮。更不用说并发进程和随机访问特定消息所带来的困难了

这就是为什么我认为我可以使用一些流压缩器,向它提供一组公共字符串p来获得压缩文本ZP,然后通过向它提供p+message[I]来计算稳定前缀,并将压缩结果与ZP进行比较。进入数据库的是没有公共前缀的压缩文本,然后在解压缩之前重新添加已知的公共前缀。在解压后,我会在公共前缀P后面扮演角色,很明显

一些测试表明,对于较小的消息,压缩比的增益将是一个或两个数量级,但不幸的是,这种技巧不适用于zlib deflate方法

是否有其他方法可以获得类似的改进(存储需求被大幅削减),而不必像上面提到的消息绑定方法那样麻烦?理想情况下,接口应该是foo_deflate(文本)和foo_inflate(压缩文本),所有的技巧都隐藏在这两个函数的实现中。我并不害怕突然产生一个编译器并弄脏它,但所有的复杂性都必须局限于压缩模块。换句话说,唯一可接受的接口更改是放气/充气功能的名称更改。捆绑方法不符合这一要求,并增加了一系列的额外复杂性

下面是一个示例,说明了这些消息的外观,为了可读性重新格式化,并稍微进行了黑客攻击以保护罪犯:

  <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
     <SOAP-ENV:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"  >
        <foobarMeowMeow xmlns="http://bungle-and-botch.com/spec/abrechnungsservice/types">
           <foobarMeowHiss xmlns="">
              &lt;?xml version="1.0" encoding="iso-8859-15"?&gt;
              &lt;foobarMeowHiss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                    xmlns="http://bungle-and-botch.com/spec/abrechnungsservice"&gt;
                 &lt;woeM&gt;
                 ... 
                 &lt;/woeM&gt;
              &lt;foobarMeowHiss;&gt;
           </foobarMeowHiss>
           <foobarHissMeow>
              &lt;?xml version="1.0" encoding="iso-8859-15"?&gt;
              &lt;foobarHissMeow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                    xmlns="http://bungle-and-botch.com/spec/abrechnungsservice"&gt;
                 &lt;jbrZ;&gt;
                 ...

xml version=“1.0”encoding=“iso-8859-15”?
foobarMeowHiss xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd=”http://www.w3.org/2001/XMLSchema" 
xmlns=”http://bungle-and-botch.com/spec/abrechnungsservice"
悲哀
... 
/悲哀
foobarmeowhis;
xml version=“1.0”encoding=“iso-8859-15”?
FoobarHissMow xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd=”http://www.w3.org/2001/XMLSchema" 
xmlns=”http://bungle-and-botch.com/spec/abrechnungsservice"
jbrZ;
...

已发布的答案

甚至在我没有充分考虑RTF的文章中解释了神奇的功能:

int deflateSetDictionary (z_streamp strm, const Bytef *dictionary, uInt  dictLength);
我有罪