转:关于数据库压缩技术的Survey

原文来自于:http://outofmemory.cn/mysql/database-compression-tech

昨天给团队内的小伙伴做了一个关于数据库压缩技术的Survey,现将其中可以公开的部分分享出来。数据库压缩技术目前已经成为了各种数据库的标配技术,这里面包括三大商业数据库、各种专业的分新型数据库,也包括各种开源数据库和NoSQL数据库。

到了今天,数据库压缩技术的运用已经不单纯是为了节省存储成本,更多的时候,是为了提供更高的计算密度(比如容量受限的SSD),以及提供更高的查询性能(OLAP)。对于压缩的有利因素,一些公共的认知是:列比行更有利于压缩,更大的输入、有序的输入更有利于压缩。

不同数据库对于压缩粒度的选择也千差万别,大多数数据库使用块作为压缩的基本单位,少数数据库会提供字段级的压缩,但也有一些数据库使用表、甚至整个库作为压缩的基本单位。很明显,压缩粒度越粗,对系统的可用性影响越大,表级以上的压缩粒度通常不再被认为是数据库本身支持了压缩技术。

除了压缩粒度之外,存储格式的选择对应用场景也比较重要,比如行存适合于宽查询(访问少数行和多数列),面向投影优化(OLTP);而列存适合于窄查询(访问多数行和少数列),面向Filter优化(OLAP);两者的混合体是所谓的块内按列压缩,块间按行组织,即行列混合存储(PAX),典型的代表是ORACLE EXADATA的HCC。

虽然是一种标配,但不同数据库对于数据库压缩技术的实现几乎各不相同,但总体上可以分为三个层次:1)Packing,比如消除小整数的前端0,消除CHAR的尾部空格等,这类压缩技术通常发生在OLTP系统中,粒度通常为字段级别,系统通常会提供正常和紧缩的两种存储格式;2)Encoding,也就是规则压缩,典型的方法包括字典、RLE、前缀、差值等,相关技术的细节,在参考资料里有详细的论述;3)Compression,也就是后端压缩,即直接使用通用的压缩算法,比如Snappy、Zlib、BZip等。

所有商业数据库和专业的分析型数据库都会引入不同的Encoding方法,而不会直接使用Compression。道理很简单,首先,Encode比Compression更懂数据,因为Compression总是把数据看成连续的字节流,而Encoding知道每个字段的边界、类型和值域特征,所以Encoding+Compression会比仅使用Compression能提供更高的压缩率;第二,Encoding会提供更高的解码速度,因为哪怕是最快的Snappy,也需要把数据完全解压后才可查询,而大多数Encoding方法不需要解码即可查询;最后,Encoding会提供合理的编码速度,虽然比不过Snappy,但会远超Zlib、Bzip这样的对手。

下面给出一个数据库压缩技术的Survey:

以下给出一些数据库压缩技术有用的链接:

时间: 2024-08-02 11:02:31

转:关于数据库压缩技术的Survey的相关文章

数据库压缩技术探索

作为数据库,在系统资源(CPU.内存.SSD.磁盘等)一定的前提下,我们希望: 存储的数据更多:采用压缩,这个世界上有各种各样的压缩算法: 访问的速度更快:更快的压缩(写)/解压(读)算法.更大的缓存. 几乎所有压缩算法都严重依赖上下文: 位置相邻的数据,一般情况下相关性更高,内在冗余度更大: 上下文越大,压缩率的上限越大(有极限值). 块压缩 传统数据库中的块压缩技术 对于普通的以数据块/文件为单位的压缩,传统的(流式)数据压缩算法工作得不错,时间长了,大家也都习惯了这种数据压缩的模式.基于这

数据库存储技术基础(一) 字典编码

说到数据库存储技术的基础,就要了解企业应用的数据特性以及面临的瓶颈. 1.企业应用的数据特性 事件产生数据 以快递追踪为例,信息读取过程包括当前读取操作的地点.时间戳.当前所处的业务流程(如收件.打包.运送)以及其他详细信息.当然,对网络游戏活动数据的分析就更为复杂.每个事件数据的数据集较小(Byte/KB)而每个实体可产生多个事件. 结构化/非结构化数据的结合 结构化数据有标准的格式存储即可被计算机自动处理.非结构化数据是不具有特定的数据解析模型,不能被计算机自动处理的数据,例如视频.图片与任

oracle 表压缩技术

压缩表是我们维护管理中常常会用到的.以下我们看都oracle给我们提供了哪些压缩方式. 文章摘自"Oracle? Database Administrator's Guide11g Release 2 (11.2)".由于Hybrid Columnar Compression压缩仅仅有在Exadata上才支持,眼下用的比較少,我们会重点说一下basic和oltp两种压缩方式. Consider Using Table Compression As your database grows

浅谈存储重删压缩技术(一)

浅谈重删压缩技术(一) <喜欢更多内容可以关注微信公众号"围炉煮酒论IT"> 作为一个做企业存储市场的存储人,最近两年我不断被重删压缩撩拨着.对于重删压缩这个技术的好坏,真实需求还是伪需求大家看法不一.今天我就只能谈谈我个人的看法. 重删压缩是什么? 重删和压缩时完全不同的两种技术,解决不同的问题. 重删:就是说有很多分相同的数据,我只存储其中一份,其他的重复数据块我保留一个地址引用到这个唯一存储的块即可. 压缩:将一个大字符串中的子串用一个很简短的数字来标记,然后检索该字

腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

本文来自腾讯前端开发工程师" wendygogogo"的技术分享,作者自评:"在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦." 1.GIF格式的历史 GIF ( Graphics Interchange Format )原义是"图像互换格式",是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了. GIF 格式可以存储多幅彩色图像,如果将这些图像((https://www.q

常见数据库加密技术对比

数据库加密作为近年来兴起的数据库安防技术,已经被越来越多的人所重视.这种基于存储层加密的防护方式,不仅可以有效解决数据库明文存储引起的泄密风险,也可以防止来自内部或者外部的入侵及越权访问行为. 从技术手段上来看,现今数据库加密技术主要有三大类,分别是前置代理及加密网关方式.应用层加密方式以及后置代理方式.这三类技术各自的特点如何,彼此之间孰优孰劣,下文详尽介绍. 前置代理及加密网关技术 该技术思路是在数据库之前增加一道安全代理服务,对数据库访问的用户必须经过该安全代理服务,在此服务中实现如数据加

高级数据库典型技术

数据库作为计算机学科中一个比较重要的分支,也是一个对于程序员来说非常好的学习方向.平时我们用的最多的,同时也是接触最多的一定是增删改查语句,select, update,delete等,当然,我不会拿这些再说一遍,这些都是老的掉渣的东西了.所以我们可以学习高级数据库中所以涉及的技术.换句话,其实就是抛开业务层的逻辑,从更加深层次的角度理解数据库.今天我主要提交3个技术点, 1.数据索引技术,典型的B+树索引系列 2.数据库故障恢复技术,我这里只提的是基于日志的恢复技术 3.数据库系统结构,讲讲时

ADO.NET数据库访问技术

ADO.net:数据库访问技术程序操作的数据都是变量或对象,这些东西都存在于内存中但是有很多的数据是存在数据库中的,数据库中的数据存在于硬盘上 作用:将数据库中的数据取到内存中来,可以让程序进行操作 将内存中的数据,写入到数据库中 1.using System.Data.SqlClient; //引用命名空间 2.建立 数据库连接类 string str = "server=.;database=Data0515;user=sa;pwd=123;";//连接字符串 SqlConnect

Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问 对于可以静态化的页面,尽可能静态化 对一个动态页面中可以静态的局部,采用静态化 部分数据可以生成XML,或者文本文件形式保存 使用数据缓存技术,例如: MemCached (二)优化的检测方法 1.用户体验检测 2.Mysql状态检测 在Mysql命令行里面使用show status命令,得到当前mysql状态. 主要关注下列属性: key_read_requests (索引读的请求数)(key_buffe