260 likes | 483 Views
基于 PostgreSQL 的数据压缩方案的 研究与实现. 答 辩 人 : 安泽林 指 导 老 师 : 陆嘉恒 教授 专 业 : 软件工程. 2014/5/6. 目 录. 选题背景 相关工作 研究 内容 总结与展望. 选题背景. 研究背景. 数据增长带来的业务与挑战. IT 必须支持快速增长的数据量 性能通常会随着数据增长而下降 存储成本上升. 为什么要进行数据库压缩 存储空间通常是数据库解决方案中最贵的部分 节省管理存储空间所带来的场地费用和人力费用 1. 减少 IO 开销 2. 增加缓冲命中率
E N D
基于PostgreSQL的数据压缩方案的研究与实现 答 辩 人 : 安泽林 指导 老 师 : 陆嘉恒教授 专 业 : 软件工程 2014/5/6
目录 • 选题背景 • 相关工作 • 研究内容 • 总结与展望
选题背景 研究背景 • 数据增长带来的业务与挑战 • IT 必须支持快速增长的数据量 • 性能通常会随着数据增长而下降 • 存储成本上升
为什么要进行数据库压缩 存储空间通常是数据库解决方案中最贵的部分 节省管理存储空间所带来的场地费用和人力费用 1.减少IO开销 2.增加缓冲命中率 3.提升系统性能 选题意义 研究背景
目录 • 选题背景 • 相关工作 • 研究内容 • 总结与展望
How to Wring a Table Dry: Entropy Compression of Relations and Querying of Compressed Relations 提出了一种压缩方法,其可以保持高效的查询处理。(分布,相关性,元组排序) Data Compression Support in Databa 介绍了各种压缩算法和DB2中采用的压缩算法和涉及到的相关问题 相关研究工作
表扫描性能 DML 性能 小于 3% 的开销 快 2.5 倍 时间 (秒) 时间 (秒) 相关数据库工作 研究背景 存储利用率 • Oracle实际压缩效果 缩小 3 倍 • ERP系统中十个最大的表 MB
相关数据库工作 研究背景 • DB2行压缩 文本数据压缩取决于重复出现的字符串和 头部或尾部的空白字段 BLUE x’01C’ x’01C’ DALLASBLUE DALLAS 压缩行 未压缩行 相同连续的字节序列被12比特位的字符代替 DATA PAGE DALLAS x’01C’ …
理论研究和实验没有深入做成产品 大多压缩技术只是单纯为减少存储 商用数据库系统的压缩技术大多专利保护(付费) 相关研究工作 • 现有工作的问题
目录 • 选题背景 • 相关工作 • 研究内容 • 总结与展望
1.减少存储开销 2.提高系统性能 研究内容 主要研究内容 • 压缩收益
研究内容 主要研究内容 • 数据压缩 1.行级的字段压缩方案 2.页级的字典压缩方案 3.元组紧凑压缩方案
行级的字段压缩方案 主要研究内容 • 行压缩场景
行级的字段压缩方案 主要研究内容 • 行级的字段压缩方案流程图 输入元组 获取可压缩字段 按字节处理 是否结束? 是 插入结束 标记符 否 是否常用字符 是 编码压缩 输出 压缩后字段 输出元组 否 依次插入标记字节和原编码
页级的字典压缩方案 主要研究内容 • 页级的字典压缩方案示意图
页级的字典压缩方案 主要研究内容 • 页级的字典压缩方案流程图 申请并初始化数据页面 待插入元组 是否为页内 第一条元组 是 申请并初始化字典空间 插入元组 结束返回 否 是 是 计算页内元组所占空间 是否超过阈值 压缩处理 计算页面剩余空间 是否有足够空间插入新元组 否 否
元组紧凑压缩方案 主要研究内容 • 元组紧凑压缩方案原理 68bytes 3byte 2bytes 21bytes 3bytes TupleHeader name (char(4)) age (int) company (char(5)) padding padding salary (int) Other attributes padding 20bytes 6bytes 5bytes 4bytes 4bytes INSERT INTO testtb (name, age,company,salary) VALUES (‘azl’, 25,’INFO’,1000) 元组头部 ffffff98|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4|0|2|8|18|0| b|61|7a|6c|20|0|0|0|19|0|0|0|d|49|4E|46|4F|20|0|0|ffffffe8|3|0|0|… 数据域
元组紧凑压缩方案 主要研究内容 • 元组紧凑压缩方案流程图 缓冲区页面 带插入元组 根据元组描述符对元组进行解构 重新计算数据长度和所需空间 根据元组及其数据长度进行填充 获取 元组描述符
压缩方案的查询实现 主要研究内容 • 顺序扫描与索引扫描 Loop SeqScan Join IndexScan和SeqScan 每次从表中获取一个元组存放到TupleTableSlot中 IndexScan SeqScan
压缩方案的查询实现 主要研究内容 TupleTableSlot • 顺序扫描与索引扫描 OtherFields… void slot_deform_tuple(HeapTuple,TupleDesc,Buffer){ for(…){ tts_values[i] = … tts_isnull[i] = … } } 物理元组 HeapTuple tts_tuple 元组描述符 TupleDesc tts_tupleDescriptor Buffer tts_buffer 元组缓冲区 int tts_nvalid 已解构出的元组属性个数 Datum* tts_values bool* tts_isnull OtherFields… 虚拟元组
实验结果 主要研究内容 • 行压缩实验结果
实验结果 主要研究内容 • 页压缩实验结果
实验结果 主要研究内容 • 元组紧凑实验结果 (68 – 8) / 68 = 88.24%
目录 • 选题背景 • 相关工作 • 研究内容 • 总结与展望
总结与展望 • 总结 1、实现了行级的字段压缩方案。 2、实现了页级的字典压缩方案。 3、实现了元组紧凑压缩方案。 • 展望 1、实现其他类型字段的压缩并使其可以参与表操作。 2、页级的压缩方案和元组紧凑压缩操作可以结合。