原文来自于: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:

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

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

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

    本文来自腾讯前端开发工程师“ wendygogogo”的技术分享,作者自评:“在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦.” 1.GIF格式的历史 GIF ( Gr ...

  2. 【RMAN】使用RMAN的 Compressed Backupsets备份压缩技术 (转载)

    1.Oracle参考文档中关于RMAN备份压缩的描述1)关于如何通过调整RMAN参数启用取消备份压缩功能http://download.oracle.com/docs/cd/B19306_01/bac ...

  3. oracle 表压缩技术

    压缩表是我们维护管理中常常会用到的.以下我们看都oracle给我们提供了哪些压缩方式. 文章摘自"Oracle® Database Administrator's Guide11g Rele ...

  4. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  5. C#与数据库访问技术总结(十八)

    ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...

  6. ASP.NET MVC5--为数据库新增字段(涉及数据库迁移技术)

    Setting up Code First Migrations for Model Changes--为模型更改做数据库迁移. 1.打开资源管理器,在App_Data文件夹下,找到movies.md ...

  7. Java后端实现图片压缩技术

    今天来说说图片压缩技术,为什么要使用图片压缩,图片上传不就完事了吗?对的,这在几年前可以这么说,因为几年前还没有现在这么大的并发,也没有现在这么关注性能. 如今手机很多,很多人都是通过手机访问网络或者 ...

  8. C语言中的内存压缩技术

    C语言中的内存压缩技术 前言 在整个研究生阶段我都在参与一个LTE协议栈实现的项目,在这个项目中,我们利用一个自己编写的有限状态机框架将协议栈中每一层实现为一个内核模块.我们知道,在编写内核代码时需要 ...

  9. 20.2.翻译系列:EF 6中基于代码的数据库迁移技术【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx EF 6 ...

随机推荐

  1. c#基础编程—泛型

    一.引言 泛型的主要思想是将算法与数据结构完全分离开,使得一次定义的算法能作用于多种数据结构,从而实现高度可重用的开发.泛型,通过参数类型化来实现在同一份代码中操作多种数据类型,利用“参数化类型”将类 ...

  2. CMDLINE的解析

    在linux的config文件中有一个特殊的宏定义CMDLINE,以前也一直在使用这个宏的参数,但是真正这个宏的解析和使用却不怎么明确.这次有机会多对它有些了解,不妨把这个浅显的认识说出来,记下来. ...

  3. 【Android - MD】之CoordinatorLayout的使用

    CoordinatorLayout是Android 5.0新特性--Material Design中的一个布局控件,主要用来协调各个子视图之间的工作,也可以用来作为顶部布局.CoordinatorLa ...

  4. (使用步骤)ThinkPHP3.1.2中如何配置Ckeditor_4.1.1和Ckfindtor(转)

    ThinkPHP3.1.2中如何配置Ckeditor_4.1.1和Ckfindtor  一.下载Ckeditor和Ckfinder Ckeditor官网 http://ckeditor.com/dow ...

  5. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(28)-系统小结 我们从第一节搭建框架开始直到二十七节,权限管理已经告一段落,相信很多有跟上来的园友,已经 ...

  6. 坚持c++,真正掌握c++(2)

    在c++中对c中的输入输出进行了扩展,採用了面向对象的设计方法设计了c++中的输入输出(IO).输入输出依照操作的对象分类可分为:1. 标准IO(对计算机的键盘或者显示器进行读写操作).2. 文件IO ...

  7. db4o官方停止支持及面向对象数据库的一些感想

    前一段时间试用了db4o,真心认为不错.但自己在国内搜索了一下,并没有找到不论什么一个专门的论坛和面向对象的数据库产品.深感这东西在国内并没有太普及. 但自己试用认为这个东东真心不错(当然也有自己的优 ...

  8. gitlab一键安装

    参考 https://about.gitlab.com/downloads/

  9. CSU1312:榜单(模拟)

    Description ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如Oricon和Billboard,现在给出每周各个单曲的销量请给出每周的TOP5以及TOP5中各个单曲的浮动情况. 量的 ...

  10. linux下ntfs硬盘的加载

    问题:       # mount –t ntfs /dev/sdb1 /mnt/       mount: unknown filesystem type ‘ntfs’       这是由于Cent ...