[IR] XML Compression
Ref: https://www.ibm.com/developerworks/cn/xml/x-datacompression/
Language-Equivalent (类似路径压缩 )
root --> o12有如下三条路径:
- staff
- dept/member
- support/member
Figure, Language-Equivalent nodes
例如:o3, o4, o8, o12 都是 root‘s staff。
Figure, Elimination效果
Algorithm:
Let L(x) := {w | 存在 a path from the root to x labeled w}
到x期间线上的权值(Label)。
The set L(x) may be infinite when there are cycles
有环则可能无限循环。
Nodes x, y are language-equivalent (x 恒等于 y) if L(x) = L(y)
俩节点的label集合相同,则language-equivalent。
We construct index I by taking the nodes to be the equivalent classes for 恒等于
根据这些个玩意来构建index(图索引)。
- 主要是根据label来合并,合并后的节点会出现重复的部分,比如o12。
XPath: dept/member/(name | phone)
-> dept/member/name UNION dept/member/phone
-> {o5, o6, o9} UNION {o10}
-> {o5, o6, o9, o10}
但这样一来,失去了一些信息细节。
- 这个完全是根据label来合并,合并后的节点会出现重复的部分,但效果高,常用!
或者为了提高构建效率,计算效率,增加了space cost(可能大于ori graph),变为简洁的树,没有cycle。如下所示:
Figure, Data Guide
Outline
xmill原理解析
Firgure, 根据其是否支持执行查询对 XML 压缩器进行分类
独立于模式的压缩方案
Features:
- 此类压缩模式不要求提供可用的模式信息便能执行编码和解码流程。
- XMill 是第一次实现 XML 感知的压缩器,
- 它引入了一个新颖的观点将 XML 文档的结构与数据分隔开,
- 并根据数据在树形中的相对路径及其数据类型,将数据值分组到同质 (homogenous) 容器中。
First specialized compressor for XML data
SAX parser for parsing XML data
Still using gzip as its underlying compressor
Clever grouping of data into containers for compression 同type压缩效率高 --> 见Detail
Compress XML via three basic techniques
Compress the structure separately from the data //data与structure 分开
Group the data values according to their types //data内同type一起压缩
Apply semantic (specialized) compressors
Detail:在 XMill 中,源 XML 文档的结构和数据值部分被单独收集和压缩。
(A) 在结构部分,在将编码传递到后端一般文本压缩方案之前,XML的标记和属性以基于词典的方式进行编码。
XMill 的结构编码方案为每个不同的元素和属性名称分配一个整数代码,作为进入元素和属性名称词典的密钥。
(B) 在数据部分,数据值根据路径和数据类型被分组为同质和语义相关的容器。
然后,每个容器通过适用于该容器的数据类型的专用的压缩器进行独立压缩。该分组操作本地化重复,从而提高压缩程度。
在最新版本的 XMill 源分布中,压缩格式的中间二进制可以传递到三种替代后端通用压缩器之一:gzip、bzip2 和 PPM。
下图 说明了 XMill 压缩器的一般架构概述,提供 XML 解析器、结构和数据容器,一个或多个压缩方案,以及被压缩的 XML 文件(包含压缩结构和压缩数据)。
本示例包括:
独立的元素(
customers、customers/customer、
customers/customer/firstName、
customers/customer/lastName、
customers/customer/invoice、
customers/customer/invoice/items
customers/customer/invoice/items/item)以及
属性(
customers/customer/@id
customers/customer/invoice/@total)表。
Figure, 将 XML 文件分裂为结构和数据容器的示例
元素和属性表存储 XML 文档的结构容器。
每个独特路径(元素或属性)的值存储在单独的表格(容器)中,
因此每个容器中的值均变为同质,可以更高效地进行压缩。具体如下:
同质压缩效果演示
XML-ized apache web log inflates to 24.2 MB (gzipped 2.1MB)
但是,还能更小! 如下:
没有最小,只有更小:
Group the data values according to their types:
Apply semantic (specialized) compressors:
Examples:
-
- 8, 16, 32-bit integer encoding (signed/unsigned)
- differential compressing (e.g. 1999, 1995, 2001, 2000, 1995, ...)
- compress lists, records (e.g. 104.32.23.1 4 bytes)
- Need user input to select the semantic compressor
15.9M --> 0.82M且有结果的形式。
依赖于模式的压缩方案
(非重点)
此类压缩器在编码和解码流程中要求可用 XML 文档的模式信息。例如,XAUST XML 压缩器将 DTD 的模式信息转换成一组确定性有限自动机 (DFA),每个 DFA 对应于 DTD 中的一个元素。然后每个转换都用一个元素标记,与转换有关的行为是调用 DFA 的模拟器,可将该行为用于标记该转换的元素。XAUST 将同一元素的所有数据都归入单一容器,然后使用算 order-4 压缩器的单个模型以递增方式压缩该容器。使用 DTD 模式信息,XAUST 能够跟踪文档的结构,并能够准确预测预期符号。只要预测到符号是独特的,就不需要对其进行编码,因为解码器从 DTD 生成相同的模型,从而可以生成独特的预期符号。
RNGzip XML 工具可以压缩符合给定 Relax NG 模式的 XML 文档。在 RNGzip 中,发送方和接收方必须提前同意使用相同的模式。在这个意义上说,模式类似于用于加密和解密的共享密钥。RNGzip 使用 Relax NG 模式验证程序从指定的模式构建确定性树自动机。然后,给出一个 XML 文档,用它检查 XML 是否被自动机接受。有了这种自动机,接收方可以通过传输少量信息,重建整个 XML 文档。如果在自动机中有一个选择点,那么 RNGzip 只传输已经完成的转换,如果遇到文本转换,则值传输匹配的文本。
从理论上说,依赖于模式的压缩器可能实现比独立于模式的压缩器更高的压缩比。但是它们并不是更好的选择,或通常被用作 XML 文档的模式信息,并不总是可用,从而它们失去了 XML 表示半结构化数据的灵活性。
只有使用此类压缩器来压缩带有预定义模式的 XML 文档时,这类压缩器才是有效的。
XGrind 原理解析
可查询 XML 压缩器。这种 XML 压缩器允许通过其被压缩的格式处理查询。
这种压缩器的压缩比通常比归档 XML 压缩器的压缩比差。这类压缩器主要侧重于避免在查询过程中进行完整的文档解压缩。
实际上,对被压缩的 XML 格式执行直接查询的能力对于许多托管在资源有限的计算设备上的应用来说都非常重要,如:移动设备和 GPS 系统。在默认情况下,所有的可查询压缩器也是 XML 感知的压缩器。根据它们如何对 XML 文档的结构和数据部分进行编码,可以对这组压缩器进行进一步分类:
-
- 同质压缩器。XML 文档的原始结构被保留,您可以使用与原始格式相同的方式访问并解析被压缩的格式(如:XGrind)。
- 非同质压缩器。对 XML文档的编码过程将结构部分和数据部分(如:XQueC)分离。因此,被压缩格式的结构与原始 XML 文档的结构不同。
Figure, 根据其是否支持执行查询对 XML 压缩器进行分类
同质可查询 XML 压缩器
Features:
此类压缩器以压缩格式保留 XML 文档的原始结构,以便能够使用与原始格式相同的方式对其进行访问和解析。
XGrind 是第一个与 XML 有关的压缩方案,支持查询且无需完全解压整个被压缩的 XML 文档。(但,never been used in 工业界)
XGrind 没有分离数据和结构。它保留了 XML 文档的原始结构。DTD-conscious [Document Type Definition]
XGrind 压缩格式的同质性质为 XGrind 提供了许多有趣的功能:
-
- 可以将被压缩的 XML 文档视为原始 XML 文档,相应的编码取代其标记和元素/属性值。因此,可以将 XGrind 视为扩展的 SAX 解析器。
- 可以在压缩文档上构建 XML 索引技术,构建方式与在常规 XML 文档上构建它们的方式相同。在 XGrind 中,元素和属性名称使用基于词典的编码方案进行编码,字符数据通过半自适应 Huffman 编码进行压缩。XGrind 的查询处理器只能处理压缩值的精确匹配和前缀匹配查询,还可以处理对解压值的部分匹配和范围查询。然而,XGrind 不支持一些操作,例如,它不支持压缩域中的不等式选择。因此,XGrind 不能执行任何连接、聚合、嵌套查询或构建操作。
Encodes elements and attributes using XMill’s approach
DTD-conscious: enumerated attributes with k possible values are encoded using a log2 k-bit scheme
Data values are encoded using non-adaptive Huffman coding
Requires two passes over the input document
Separate statistical model for each element/attribute
Homomorphic compression: compressed document retains original structure
主要是基于简单的mapping。
非同质可查询 XML 压缩器
(非重点)
此类压缩器在 XML 文档的编码过程中将结构部分和数据部分分隔开。因此,与同质类不同,压缩后的格式的结构不同于原始 XML 文档的结构,需要在解压过程中使用不同的方式进行解析。
但是,它们可以实现更好的压缩比。例如,XSeq 是基于语法的可查询 XML 压缩方案,它采用了著名的基于语法的文本串压缩算法 Sequitur。
在 XSeq 中,输入 XML 文件的标记被分隔到一组容器中,然后使用 Sequitur 对每个容器进行压缩。Sequitur 压缩算法是线性时间在线算法,为给定的字符串输入生成了一种与上下文无关的语法。使用定义的上下文无关语法,XSeq 可以避免无关压缩数据的后续扫描,只处理将通过给定查询进行匹配的数据值。此外,上下文无关的语法允许 XSeq 直接通过压缩文件处理查询,而不必对文件进行全部或部分解压缩。为了关联存储在不同容器中的数据值并加快查询评估速度,XSeq 使用了一组存储在压缩文件中的索引,并在处理规则内容之前将它们加载到内存中。例如,它使用了一些结构性索引,通过这些索引在容器中快速定位每个数据值,而无需进行解压缩处理,同时头文件索引中包含指针列表,这些指针指向文件中每个容器的入口。
TREECHOP XML 压缩器是另一种可查询 XML 压缩器,在使用该压缩器时,压缩流程以构建 XML 文档的基于 SAX 的解析开始,并按照最深者最先的顺序将已解析的标记写出到压缩流中。每个节点的代码字的前缀是其父节点的码字,如果 XML 文档树中的两个节点拥有相同的路径,则它们共享相同的代码字。每个 CDATA 部分、注释、处理指令和非叶节点都被分配一个二进制代码字。该代码字根据树节点的路径进行唯一分配。因为树节点编码都按照最深者最先的顺序被写入压缩流,因此解码器可以使用自适应编码信息,以递增方式重新生成原始 XML 文档。在 TREECHOP 中,可以通过压缩流使用单一扫描,执行精确匹配和范围查询。
XQuec 系统基于 XML 文档内的分隔结构和内容,将片段和存储模型用于已压缩的 XML 文档。此外,它通过正确选择将容器进行分组的方法,确保属于同一个组的容器也会在查询谓语中一起出现。为了执行压缩域内的谓语评估,它确保涉及到谓语的容器属于同一个组,并采用在压缩域中支持该谓语的算法进行压缩。关于谓语的信息可以使用可用查询工作负载进行推测。XQueC 利用查询工作负载信息,根据源模型将容器分为不同的集,并为每个集分配最适当的压缩算法。XQueC 还设计了用来评估 XML 查询的代数。该代数由基于成本的优化器使用,该优化器能够自由混合使用常规运算符以及与压缩有关的运算符。