[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 查询的代数。该代数由基于成本的优化器使用,该优化器能够自由混合使用常规运算符以及与压缩有关的运算符。
[IR] XML Compression的更多相关文章
- [IR] Advanced XML Compression - ISX
Ori paper: http://www.cse.unsw.edu.au/~wong/papers/www07.pdf ISX Requirements 1 Space does matter fo ...
- [IR] Advanced XML Compression - XBW
思考:与ISX对比后能得出什么结论 原理解析: We proposed the XBW-transform that mimics on trees the nice structural prope ...
- [IR] Graph Compression
Ref: [IR] Compression Ref: [IR] Link Analysis Planar Graph From: http://www.csie.ntnu.edu.tw/~u91029 ...
- 本人AI知识体系导航 - AI menu
Relevant Readable Links Name Interesting topic Comment Edwin Chen 非参贝叶斯 徐亦达老板 Dirichlet Process 学习 ...
- [Code] 烧脑之算法模型
把博客的算法过一遍,我的天呐多得很,爱咋咋地! 未来可考虑下博弈算法. 基本的编程陷阱:[c++] 面试题之犄角旮旯 第壹章[有必要添加Python] 基本的算法思想:[Algorithm] 面试题之 ...
- [IR] BWT+MTF+AC
BWT (Burrows–Wheeler_transform)数据转换算法 MTF(Move-to-front transform)数据转换 基于统计的压缩算法:游程编码 良心PPT: bwt_bas ...
- asp.net core 系列之Performance的 Response compression(响应压缩)
本文,帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正). 什么是响应压缩?响应压缩简单的说就是为了减少网络带宽,而把返回的响应压缩,使之体积缩小,从而加快响应的 ...
- tomcat架构
很多开源应用服务器都是集成tomcat作为web container的,而且对于tomcat的servlet container这部分代码很少改动.这样,这些应用服务器的性能基本上就取决于Tomcat ...
- 利用开源框架Volley来下载文本和图片。
Android Volley是Android平台上很好用的第三方开源网络通信框架.使用简单,功能强大. 下载连接地址:http://download.csdn.net/detail/zhangphil ...
随机推荐
- 用十条命令在一分钟内检查 Linux 服务器性能
原文地址: http://www.oschina.net/news/69132/linux-performance 如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出L ...
- 修正 Mui 下拉上拉刷新功能
下拉增加动态时间计算功能: 上拉增加状态文字提示功能(当然也支持时间计算功能,只是我们暂时用不到):
- Nginx静态文件路径配置
root目录与alias目录的区别 Nginx路径location配置中,使用root目录与alias目录的区别 1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接 ...
- Window Server 2008 R2系统备份
1.安装Backup 2.打开Backup工具 3.一次性备份 下一步
- java中关于AtomicInteger的使用
在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicInteger则通过一种线程安全的加减操作接口.咳哟参考我之前写的一篇 ...
- Java ThreadLocal的使用
Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量.因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread ...
- 百度Apollo无人驾驶入门课程下载
本文提供 百度Apollo官网的无人驾驶入门课程下载,主要为视频文件. 视频数量:101个:文件格式:MP4:视频总时长:2小时40分钟:文件总大小:约1.13GB: 马上下载 关注公众号罗孚传说(R ...
- 关于Java变量的可见性问题
转自:http://www.importnew.com/19434.html 博文前提 最近在oschina问答板块看到了一个关于java变量在工作内存和主存中的可见性问题:synchorized,s ...
- java多线程有哪些实际的应用场景?
多线程使用的主要目的在于: 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做请求层面的.简单的说,可能就是一个请求一个线程.或多个请求一个线程.如果是单线程,那同时只能处理一个用户的请求. ...
- wifipineapple获取用户上网信息
ssh连接到wifipineapple: 输入连接信息:ssh root@172.16.42.1 输入密码:pineapplesareyummy 安装依赖基本环境: opkg update opkg ...