`
zengguo1988
  • 浏览: 274453 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

关系型数据库中的压缩技术

阅读更多

          计算机存储的容量限制仍然日益成为IT系统的瓶颈。其主要原因有两个:第一,信息革命导致人们产生了比过去多得多的数据。巨大的数据库系统每时每刻都在产生海量的新数据。第二,随着计算机存储能力的增长,人们倾向于永久性保存所有的数据。例如,在信息革命早期,证券交易系统往往只保存近一段时间的交易细节数据。如今,人们倾向于保存所有能够被保存的数据:每一次交易,每一通电话,网站的每一次点击,交换机中的每一回通信等。

在这种趋势下,计算机存储承担着越来越沉重的压力。尤其是在企业级应用中,为了保存海量数据而在存储上投入的成本,往往已经到了令人吃惊的地步。

在数据库中使用压缩技术,是为了解决(或者至少缓解)这种压力所做出的努力之一。这种技术的定义十分简单:对存储在数据库中的数据进行压缩,从而减少占用的磁盘空间,同时又尽量不影响数据库的其他操作。

很容易想象这一技术产生的后果。被压缩后的数据能够显著地减少占用的磁盘空间,从而降低整个系统的存储成本。然而对数据进行压缩和解压缩,需要更多的CPU时间。在对速度要求十分苛刻的数据库系统中,这种CPU时间的额外支出,是否会导致效率的严重降低呢?

让我们全面地审视压缩技术引起的得失。在CPU时间上,会有额外的支出。但是,由于压缩后的数据占用的磁盘空间减少了,这意味着系统用于I/O的时间也会相应的减少。众所周知,数据库系统最大的瓶颈在于I/O:I/O速度的增长却远远跟不上CPU按照摩尔定律的增长。因此,从CPU时间上支出的成本,可以在I/O速度的提高上补偿回来,而且还可能有盈余。压缩后的数据库,不但会占用更少的磁盘空间,甚至还可能有更快的速度。

然而在实际项目中,还要考虑到多种因素的权衡,情况可能会非常复杂。幸运的是,主流的几种关系数据库在实践中都已经正式支持压缩技术。目前,数据库压缩技术主要仍然被应用于数据密集型的OLAP,而不是运算密集型的OLTP,但这并不意味着它不能被应用于OLTP。


压缩方式

目前,几乎所有的关系型数据库中应用的压缩方式,都是基于字典的压缩方式。基本原理是,将数据中重复出现的信息抽取出来,并用比较简短的符号予以代替,从而达到压缩的效果。举例来说,如果数据中重复出现了“Personal Computer”这个字符串,那么它就会被识别为一个模式(Pattern),然后所有这个字符串出现的地方都会被一个对应的符号(Symbol)代替,比如数字1。所有的模式和对应的符号都会被存储在字典里面(Dictionary),字典被用于压缩和解压缩(也就是对Pattern和Symbol进行相互替换)。当然,真实的应用比这要复杂得多。但是,理解了字典压缩的原理以后,我们已经可以从不同的角度对不同的压缩技术进行区分。

  • 按建立字典的方式区分:手工建立字典和自动建立字典。手工建立字典,意味着数据库不能自动搜索数据中的重复数据,必须人工输入所有的模式才能建立字典。这种方式出现在数据库压缩技术的早期,目前已经基本被淘汰。自动建立字典则意味着数据库会自动搜索模式而无需人工干预。
  • 按字典应用的范围区分:表级别的字典和块级别的字典。表级别的字典意味着在整个表的范围内搜索模式并建立一个唯一的字典,而块级别的字典则在每一个块上建立单独的字典。其中,块是关系型数据库中的一个术语,是存储的最小单位。
  • 按存储的方式区分:列压缩和行压缩。这涉及列存储和行存储的概念。行存储表示数据库中包含不同字段的同一行被连续存放。列存储则表示包含不同行的同一字段数据被连续存放。同一字段的数据出现重复的可能性较大,这意味着基于列的压缩可能有更高的效率,但这和传统关系型数据库的存储方式相悖。由于二者互有利弊,数据库厂商往往通过一些技巧来避免其缺陷,使之适应实际使用,甚至混合使用这两种压缩方式。

压缩相关的操作

虽然关系型数据库使用的压缩算法本身不太复杂,但是由于压缩技术改变了数据存储的底层结构,因此涉及数据库操作的方方面面。下面是一些主要的相关操作:

  • 数据查询。当接收到查询请求时,数据库系统从磁盘中读取已被压缩的数据,必须先经过一个解压的过程,将数据还原为未压缩的形式,再返回给查询请求。
  • 数据更新。当进行Insert和Update操作时,数据需要经过压缩之后才被存储。理论上来说,Delete操作只需要简单地删除数据,而无需进行压缩或解压缩。但是事实上,在某些自适应的压缩技术中,对已有数据的更新到达某一阈值时,会导致字典的自动更新(因为字典已经不能再适应当前的数据)。这意味着,IUD操作都有可能导致字典的重新创建(或删除)。
  • 数据装载。这和插入数据的过程类似,数据将会先被压缩然后被存储。在某些情况下(例如,当DB2的Automatic Dictionary Creation技术被启用时),装载数据时还可能同时创建字典。
  • 表整理。在整理表时,根据当前表被标识为压缩或未压缩,将会对数据进行相应的压缩或者解压缩处理。表整理是对整个表进行充分压缩的有效手段。
  • 压缩率评估。数据库一般会提供一个操作,在未被压缩(或未被完全压缩)的数据表上进行评估,预测能达到多高的压缩率。
  • 索引(Index)压缩。索引压缩的算法与关系型数据压缩不太一样,本文不进行深入讨论。
  • 大对象(LOB)压缩。大对象不使用关系型数据的行存储或列存储方式,因此也不适用上述的算法。
  • 日志(Log)。日志中需要保存和压缩操作相关的信息,以保证数据的一致性。
  • 备份与恢复。在备份与恢复操作时,需要进行相应的数据压缩和解压缩处理。

压缩相关的命令

虽然压缩涉及非常复杂的数据库内部机制,但理论上来说,压缩后的数据库对于使用者是透明的,所有的压缩和解压缩过程都隐藏在数据库内部。因此,在绝大部分情况下,使用者不需要进行额外的操作,甚至不需要知道数据库是否已经被压缩过。

当然,仍然有一些与特定的压缩相关的数据库命令。下面以DB2 V9.7为例,作一简单讨论。

当创建一个表的时候,可指定该表使用压缩。语法如下:

CREATE TABLE CUSTOMER (

) COMPRESS YES;

这条命令创建了一个名为CUSTOMER的表,并且在此表上使用压缩功能。以后在此表上进行的查询、插入、更新等操作,都会自动在后台执行相应的压缩和解压缩操作,而不需要使用特殊的语法。

对于一个已经存在的表,可以用ALTER TABLE命令来启用或停止其压缩功能:

ALTER TABLE CUSTOMER COMPRESS YES;

这条命令会在已存在的表CUSTOMER上启用压缩功能。

ALTER TABLE CUSTOMER COMPRESS ON;

则会关闭压缩功能。

需要注意的是,使用ALTER TABLE命令启用或停止其压缩功能后,并不会对已经存在的记录生效。举例来说,在对某个表启动压缩后,新插入的(包括被批量load的)记录以及被更新的记录都会以被压缩的格式保存,但是,对于那些已经存在、并且没有在压缩功能启用后被更新过的记录,它们仍然以原始的格式保存。这说明了为什么在启用压缩以后,数据库占有的磁盘空间并没有立即减少。

那么,怎样使压缩功能对于已经存在的记录也生效呢?答案是使用REORG整理整个表。如上例,在执行完ALTER TABLE命令以后,立即执行以下命令:

REORG TABLE CUSTOMER;

这条命令将扫描整个CUSTOMER表,并对所有的记录都进行压缩或解压缩。根据表的大小,可能会执行相当长的时间。

 

压缩率

即使在相同的压缩算法下,表的压缩率也是不固定的。与常规的文件压缩相比,表的压缩率取决于更多的因素。

  • 数据冗余度。数据库压缩的前提是被压缩的数据是冗余的。对于冗余度大的数据,往往能得到很好的压缩率。而对于冗余度很小甚至趋近于0的数据,再好的压缩算法也无济于事。不同数据库的冗余度差别是非常大的。
  • 数据分布。某些类型的压缩算法会在一个小范围内构建压缩字典。这意味在某个较小的范围内,如果可以找到较多的Pattern,就可以获得较高的压缩率。如果Pattern是均匀分布在整个表中的,那么小范围内的字典将效率很低。在表的某些列上建立聚集索引,强制使内容相似的行处于相邻的位置,往往是提高压缩率的一种有效方式。
  • 数据库群集。在群集的情况下,由于字典无法跨越群集,因此必须尽量使单一节点上的数据冗余度尽可能地高。对于DB2来说,精心设计DPF中的Hash Columns,以及配合使用聚集索引,能够有效地影响到压缩率。

某些基于真实应用的数据库的测试表明,压缩技术往往可以将数据库的大小减少70%甚至更多,同时对系统的整体性能没有明显的影响(在I/O密集的系统中,系统性能甚至可能提高)。当然,这个测试结果仅供参考,因为实际的表现依赖于数据库的具体情况。

 

 

结论

前面探讨了关于数据库可用性和扩展性方面的问题,我们看到每种产品和架构都是有缺陷的,其实架构就是有所取舍的过程,目标是用最小的代价去解决问题。所以找到适合自己的产品和架构,这才是最重要的。

 

 

个人博客正式上线,欢迎访问

 

分享到:
评论

相关推荐

    实时数据库和关系数据库的设计特点

    实时数据库可以简单地理解为它是这样的数据库:由测点信息库、实时数据库、历史数据库三个数据库组成。 测点信息库含有一个测点基本信息字段的一张表,这个表以测点标签作为关键字,对应一条测点基本信息的记录包含...

    关系型数据库下的大数据解决方案

    第2课: 分布式数据库和中间件 第3课: 海量数据之分区 第4课: 海量数据之索引 第5课: 海量数据之并行 第6课: 海量数据之数据压缩 第7课: 海量数据之初始化参数 第8课: 海量数据之SQL优化 第9课: dbms_stats包...

    TenDB Cluster是腾讯游戏CROS DBA团队提供的MySQL分布式关系型数据库解决方案

    TenDB Cluster是腾讯游戏CROS DBA团队提供的MySQL分布式关系型数据库解决方案,主要包括三个核心组件:TSpider,TenDB 、Tdbctl。TSpider是TenDB Cluster的接入层,是腾讯游戏CROS DBA基于MariaDB 10.3.7开发定制的...

    北京铜牛集团实时数据库.pptx

    传统关系型数据库写入能力每秒3000笔,内存数据库如:redis数据库每秒10万笔。国内自主开发的实时数据库,大多对外宣称每秒100万笔。世界上最有名的Pi数据库对外宣称每秒400万笔。 从写入能力上看,TrendDB数据库...

    列存储数据库关键技术综述

    近些年来, 一种新的数据存储理念, 即基于列存储的关系型数据库( 简称列数据库, 下同)应运而生。列数据库能够快速发展, 主要原因是其复杂查询效率高, 读磁盘少, 存储空间少, 以及由此带来的技术、管理和应用优势。对...

    Oracle数据库分区和压缩技术应用——让Oracle跑得更快.pdf

    Oracle数据库分区和压缩技术应用——让Oracle跑得更快.pdf

    基于MySQL的SDCORS数据库自动压缩备份机制.pdf

    基于MySQL的SDCORS数据库自动压缩备份机制.pdf

    Wonderware_Industrial_SQL_Server_v9.0.000.0341安装手册

    InSQL集成了微软公司的MS SQL Server并对其进行了的扩展,使其不仅具有高速的数据采集速度,高效数据压缩和数据存储等实时数据库性能,而且可以集成事件、概要、生产和配置等一般存于关系型数据库中的工厂数据。...

    Oracle数据库同步备份和自动压缩的实现.pdf

    Oracle数据库同步备份和自动压缩的实现.pdf

    基于ORACLE数据库传输表空间的数据压缩解决方案.pdf

    基于ORACLE数据库传输表空间的数据压缩解决方案.pdf

    SQL SyBase IQ

    Sybase IQ是与Adaptive Server Enterprise (ASE),Sybase Adaptive Server Anywhere (ASA),Microsoft SQL Server,Oracle和IBM DB2等一样的关系型数据库管理系统(DBMS),Sybase IQ最初是Expressway公司作为查询...

    Oracle 11g数据库的OLTP表压缩评测.pdf

    Oracle 11g数据库的OLTP表压缩评测.pdf

    数据库系统基础知识.pdf

    Visual FoxPuo 程序设计基础 第1章 数据库系统基础知识 数据库基础知识 1.1 数据模型 1.2 数据库系统 1.3 关系数据库 1.4 数据库系统的体系结构与开发工具 1.5 1.1 数据库基础知识 通常,把用计算机对数据进行处理的...

    mysql面试题史上最强汇总:基础知识+性能优化+备份与恢复+ 数据库设计+数据库管理+高可用性与容灾+安全性+ 框架集成等

    MySQL 是最常用的关系型数据库管理系统之一,因此在招聘和面试过程中 MySQL 相关的问题经常会被问到。以下是 MySQL 面试题的一些分类,完整内容见压缩文件: 1. 基础知识:包括 MySQL 数据库的基本概念、SQL 命令、...

    Sybase IQ“绿色数据库”构建绿色信息

    Sybase IQ 关系型数据库,专为数据仓库等分析型应用而设计,以众多革命性的创新技术,如列存储、数据压缩、丰富的索引、Multiplex等等,为企业减少数据存储成本达3-10倍、提高查询速度10-100倍、缩短部署周期数倍...

    数据结构Redis中数据类型对应的数据结构.pdf

    相对于关系型数据库(⽐如 MySQL),Redis 也被叫作⾮关系型数据库。 像 MySQL 这样的关系型数据库,表的结构⽐较复杂,会包含很多字段,可以通过 SQL 语句,来实现⾮常复杂的查询需求。⽽ Redis 中只包含"键"和"值...

    大数据关键技术.doc

    开发新型数据库技术,数据库分为关系型数据库、非关系型数据库以及数据库缓存 系统。其中,非关系型数据库主要指的是NoSQL数据库,分为:键值数据库、列存数据库 、图存数据库以及文档数据库等类型。关系型数据库...

    大数据关键技术(1).doc

    开发新型数据库技术,数据库分为关系型数据库、非关系型数据库以及数据库缓存 系统.其中,非关系型数据库主要指的是NoSQL数据库,分为:键值数据库、列存数据库、 图存数据库以及文档数据库等类型。关系型数据库包含...

    金属材料标准的应用数据库MtrRvw

    MtrRvw厘清规范和标准的试验特征的逻辑关系,将试验数据放在在这个逻辑关系中考察其符合性; 试验特征的逻辑关系可能受一些特殊条件的影响,这些特殊条件由用户设置或确认; 一般的特殊条件容易发现,而依赖其它条件...

    实时数据库系统选型.docx

    Instep公司的eDNA(enterprise Distributed Network Architecture) PI在国内广泛应用于电力行业,它采用了旋转门压缩专利技术和独到的二次过滤技术,使进入到PI数据库的数据经过了最有效的压缩,极大地节省了硬盘...

Global site tag (gtag.js) - Google Analytics