列式数据库压缩方法探讨
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 例如,字符串ABBCBCABABCAABCAAB,其过程如图
• 12 3 4 5 6 7 • ABBCBCABABCAABCAAB output (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) (6, B) Index 1 2 3 4 5 6 7 String A B BC BCA BA BCAA BCAAB
• 现今的关系数据库系统大多衍生于70年代的SystemR项目原 型和Ingres项目原型,但是随着应用和硬件技术的发展, DBMS的需求不仅仅满足于SystemR和higres设计面向OLTP数 据处理的初衷,而更多的是地球科学、医学等数据仓库以 及决策支持系统等的OLAP的数据处理需求,而在这些应用 中,大多数信息都是散乱的、稀疏的,并且需要对数据进 行大量的查询处理,以便对其进行数据有效的分析处理;同 时由于硬件技术的发展,传统的高性能硬件逐渐大众化, 使得数据仓库等应用得更加普遍。因此为了满足该类应用 场景的需求,数据库系统发展的方向由满足OLTP数据处理 的需求转向满足OLAP数据处理的需求,OLAP是对列进行 操作的,于是便衍生出面向分析处理(OLAP)的列存储数据 库系统。
SYSBAS UNIX E IQ
SYSBASE
EMC
• 在 SIGMOD06 会议上, Daniel J. Abadi通过在开源的列数据 库 C-Store 上进行实验比较和理论分析指出, 主要的压缩方 法有以下三类:
• 游程编码算法( Run-length Encoding ) • 词典编码算法( Dictionary Encoding) • 位向量算法( Bit-Vector Encoding) 。
sir
sid
eastman easily
eases
sea3
sir sid
位置 1 2 4
eastman easily
匹配串 -- eas eas
eases sea sick
输出
从右向左搜索 (7, 3, e) (15, 3, e)
seals
第一个参数代表在在这个窗口的位置上中后退N个字符 第二个参数代表匹配到的最长字符串的长度
• 算法:
• 采用两个滑动窗口,同时向后移动。一为比对窗口,2为待编码窗口 • 初始字典置为空,先在最初的比对窗口中采用LZ78算法压缩,并将压缩 的长度大于1的字符串存入字典。 • 带编码窗口先和比对窗口进行匹配,并将匹配出来的字符串存入字典, 再在字典表中查看是否有匹配的字符串。
• 优点
• 适合与数据库的数据特性压缩出来的数据可以方便进行数据库的增删改 查,order,join等操作(即不解压数据,直接对压缩态数据进行操作)
• 能够迅速的执行复杂查询 • 压缩技术为数据仓库、商务智能应用中巨大的数据量节约 存储成本 • 节省大量I/O带宽
• 比较著名的列数据库系统有开源项目C-Store,是由麻省理 工、耶鲁大学、布朗大学等合作研发的,并于2005年发布 第一版本,2006年升级为第二版本。在C-Store的研究基础 上,又衍生出来商业化的Vertica以及内存数据库系统 MonetDB。 • Google的BigTable也是一种面向列存储的数据库系统,该系 统是Google内部开发用来处理大数据量的系统,Googfe的 很多项目包括网索引、 GoogleEarth和谷歌财务都是建立在 该系统基础上的。 • SQL SERVER2011 也支持列存储索引 • FACEBOOK的数据仓库RCFile:一个结合了行存储和列存储 的数据管理系统
对于适用的数据 特征, 特征, 有比较好 的压缩效果 对列值的重复性 以及排序要求较 高
a)对于数据类型要求较低 a)对于数据类型要求较低 b) 对于数据排序要求较低 在有些情况, c ) 在有些情况, 查询效率要 比词典编码高 用位置代表数据, 用位置代表数据, 如 取值空间较大, 取值空间较大, 或重 复性较低, 复性较低, 占用空间 会比较大
LZW编码是围绕称为词典的转换表来完成的。 LZW算法得到普遍采用,它的速度比使用LZ77算法的速度 快,因为它不需要执行那么多的缀-符串比较操作。对 LZW算法进一步的改进是增加可变的码字长度,以及在词 典中删除老的缀-符串。在GIF图像格式和UNIX的压缩程 序中已经采用了这些改进措施之后的LZW算法。 LZW算法取得了专利,专利权的所有者是美国的一个 大型计算机公司—Unisys(优利系统公司),除了商业软件 生产公司之外,可以免费使用LZW算法
——压缩算法探讨
• • • • • •
简介 背景 优势 现状 数据压缩简介 列数据库压缩算法
列存储数据库是相对于传统的以记录或数据行(Record, Row)为单位进行数据处理的数据库(例如SQL Server)来 说的,它以数据表中的列(Column)为单位对数据进行存 储和查询等处理。 • 传统的关系型数据库,即数据按记录存储, 每一条记录 的所有属性都存储在一起, 如果要查询一条记录的一个属性 值, 需要先读取整条记录的数据。而列数据库是按数据库记 录的列来组织和存储数据的, 数据库中每个表由一组据库记 录的列来组织和存储数据的, 数据库中每个表由一组页链的 集合组成,每条页链对应表中的一个存储列, 而该页链中每 一页存储的是该列的一个或多个值。 •
公司组 织 YAHOO 数据仓 库大小 (TB) ) 原始数 据大小 (TB) ) 数据 行数 3853 数据库 操作系 统 UNIX 数据库 厂商 ORALCE 存储 厂商 EMC
100.386 17.014
ORACL E
Nielsen 17.685 Media Research
17.969
5024
第三个参数代表未匹配到的第一个字符
• LZ78是一个基于字典的压缩算法,需要维护一个字典,该 算法输出的码字由两个元素组成:一个参照最长匹配字典输 入索引以及一个非匹配的字符。其基本思想就是不断地从 字符流中提取新的字符串,然后用码字表示这个词条,因 此,对字符流的编码就变成了用码字去替换字符流,生成 码字流,从而达到压缩数据的目的。
字典表
订单类型
Q1 Q2
00 01
订单类型
Q1 Q1 Q1 Q1 Q1 Q2 Q2
00 00 00 00 00 01 01
• 位向量编码是为每一个不同的取值生成一个位向量, 根据位向量( 串)中 不同的位置取值 0 或 1来对应并确定不同的原始值。
订单类型
Q1位向量 位向量
Q2位向量 位向量
Q1 Q1 Q1 Q1 Q1 Q2 Q2
订单类型q1q1q1q1q1q2q2q1位向量q2位向量名称游程编码词典编码位向量算法共同特征适用于重复数据较多不适用于重复数据较少适用数据列的不同特征重复数据的排序比较规则取值空间较小取值空间较小不适用的数据列不同特排序不规则a取间空间较大数据类型长度比词典符号长度更小取值空间较大优点对于适用的数据特征有比较好的压缩效果a对于数据类型要求较低对于数据排序要求较低a对于数据类型要求较低在有些情况查询效率要比词典编码高缺点对列值的重复性以及排序要求较需要创建一张词典表增加维护代价如果数据重复性不高词典表会过于巨大用位置代表数据复性较低占用空间会比较大lz77算法在某种意义上又可以称为滑动窗口压缩其基本原理是将已输入数据流的一部分作为字典编码器为输入数据流开一个窗口并且随着对字符串的编码不断地将窗中的数据从右一道左
Row Id
域名 …
1 2 3 … 5 6 7
滑 动 窗 口 编 码 窗 口
001 010 011 100
www. .com .cn
www.b aidu.co m
Row Id
域名 … 011 001cctv010 100/index
• 定义:在不丢失信息的前提下,缩减数据量以减少存储空 间,提高其传输、存储和处理效率的一种技术方法。 • 流行算法:
• 随着数据库的规模越来越大,如何在数据库中使用数据压缩是很多研 究者关注的热点。然而,传统的行存储数据库由于存储的数据的差异 性较大,对其采用压缩也往往每次查询时不得不进行解压。不过压缩 后数据量小的优点在某种程度上还是胜过解压的额外开销的。列存储 的概念提出以后,由于列存储的特点,它非常适合轻量级压缩,从而 可以不解压而直接访问压缩态的数据。
1 1 1 1 1 0 0
0 0 0 0 0 1 1
名称 共同特征 适用数据列 的不同特征 不适用的数 据列不同特 征 优点
游程编码
词典编码
位向量算法
适用于重复数据较多, 适用于重复数据较多,不适用于重复数据较少 重复数据的排序 比较规则 排序不规则 取值空间较小 a)取间空间较大 a)取间空间较大 b) 数据类型长度比词 典符号长度更小 a)对于数据类型要求较低 a)对于数据类型要求较低 b) 对于数据排序要求较低 取值空间较小 取值空间较大
输入数据流:
步骤
位置 字符
1 A
2 B
3 B
码字 1 2 3
4 A
5 B
6 A
词典 A B C AB BB BA ABA ABAC -
7 B
8 A
输出
9 C
位置
1 2 3 4 5 6
1 2 3 4 5 -
4 5 6 7 8 -
1 2 2 4 7 3
• LZ77和LZ78算法的结合 • 背景:
• 数据列中的数据项一般在上下文中更容易找到匹配串; • 数据列的存储类型固定,因此每项的存储空间固定,更易使用滑动窗口
Q1 Q1 Q1 Q1 Q1 Q2 Q2
1 1 1 1 2 3 3
2 5 8 4 5 2 4
Q1, 1, 5 1, 1, 4 Q2, 6, 2 2, 5, 2 3, 7, 1
2 5 8 4 5 2 4
• 词典编码就是生成一个 原始值替代值 的对照词典。为了起到压缩的作 用, 替代值的长度小于原始值的长度。存储的时候,只存储替代值而不 是原始值, 从而压缩了存储空间。
• • • •
Source.txt文件大小:21762字节 LZ77算法压缩后大小:2869字节 LZW算法压缩后大小:2172字节 自定义算法压缩后字节:2791字节
END
缺点
需要创建一张词典 增加维护代价, 表,增加维护代价,如 果数据重复性不高, 果数据重复性不高, 词典表会过于巨大
• LZ77 算法在某种意义上又可以称为“滑动窗口压缩”,其 基本原理是将已输入数据流的一部分作为字典,编码器为 输入数据流开一个窗口,并且随着对字符串的编码不断地 将窗中的数据从右一道左。 • 滑动窗一般分为两部分,左边的部分称为搜索缓冲存储器, 这一部分是当前的字典,始终存有刚刚输入的字符和已编 码过的字符;右边的部分称为向前的缓冲存储器。其中存 有即将被编码的输入字符集。 • 在实际应用中,搜索缓冲存储器的窗口一般较长,可长达 几千字节,而向前的缓冲存储器只有几十字节。
• 游程编码算法是比较适合列数据库的压缩算法之一,即用一个三元组记 录数据值、 数据出现的起始位置和持续长度( 即行程) ,以代替具有相同 值的若干连续原始数据,使三元组的存储长度少于原始数据的长度。 • 三元组描述为( X, Y, Z) 其中X:数据的值, Y: 起始位置, Z:长度。
订单 类型 产品 ID 产品 类型 订单类型 产品ID 产品 产品类型
1 2 3 … 5 6 7
/index
• 原数据:
id 1 2 3 4 5 6 7 No. 20000704 20000704 20000704 20000704 20000704 20010706 20010706 id 8 9 10 11 12 13 14 No. 20010706 20010706 20020704 20020704 20020704 20020708 20020708 id 15 16 17 18 19 20 21 No. 20020708 20020708 20030713 20030713 20030713 20020709 20020709 id 22 23 24 25 26 27 28 No. 20020709 20020709 20020709 20030704 20030704 20030704 20030713 id 29 30 31 32 …… 999 1000 No. 20030713 20030713 20030713 20030713 …… 20050706 20050706