热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

DB210新特性:自适应压缩

在刚刚发布的DB2LUW10.1中,引入了一种新的压缩技术——自适应压缩。这种压缩方案,是表压缩和页压缩的混合体,即用户的数据表在被表级字典压缩之后,还会被数据页一级的字典压缩。

在刚刚发布的 DB2 LUW 10.1 中,引入了一种新的压缩技术——自适应压缩。这种压缩方案,是表压缩和页压缩的混合体,即用户的数据表在被表级字典压缩之后,还会被数据页一级的字典压缩。

该方案继承了原有表压缩高压缩率的优点,同时利用动态的页级字典,在提高压缩率的同时,有效缓解了原有表压缩静态字典导致压缩率随数据变化衰减的问题

DB2 中的表压缩

在数据大爆炸的时代背景下,数据压缩的作用显得越发重要。压缩一方面可以节省数据存储成本,另一方面可以提高数据的访问效率。通常来说,压缩是基于数据字典的。字典中记录了数据中重复出现的、较长的模式和用来表示这些模式的、较短的符号。压缩的过程就是将原始数据中的模式替换成符号,而解压就是将压缩后数据中的符号替换成原先的模式,从而还原出原始数据。

从 V9.1 开始,DB2 Linux Windows Unix 提供了对用户表数据的行压缩(Row Compression)支持,这一压缩技术也称为深度压缩(Deep Compression)。行压缩是针对先前已有的值压缩技术提出的。值压缩是将表不同行、同一列的重复数据只保存一份,其他地方仅是此处的引用而已。行压缩则是以行为数据压缩的基本单位,在压缩过程中,行不会被拆为列来进行处理。通过该技术,用户能够为数据表建立一个表级别的数据字典,并使用该字典来压缩整个表中的全部数据。在对一个表启用了压缩之后,需要用户执行表重组在已有数据上建立字典,并压缩已有数据。在向一个已经启用了压缩、并且创建了字典的表中插入数据时,新数据会被压缩;修改该表中的数据时,数据会被解压,修改后再存入表中;查询表中的数据时,数据会被解压之后返回给用户。如果表中的数据在建立字典之后发生剧烈变化,原先的字典就有可能不能很好的压缩变化之后的数据,这时候可以使用带有重置字典选项的表重组命令来重新创建表压缩字典(REORG TABLE … RESETDICTIONARY)并用新字典压缩已有数据。

在 DB2 V9.1 中,表重组是创建字典的唯一方式,但是表重组的开销较大,使用较为不便。通常的做法是,将一小部分数据导入表中,在此之上进行表重组建立字典,然后再进入表中的数据就会被压缩了。在 V9.5 中自动化了这一过程,增加了自动字典建立(ADC,Automatic Dictionary Creation)特性。在启用了行压缩之后,压缩字典会在表中的数据增加到一定数量之后(默认是 2M)自动创建,随后进入表中的数据就会被该字典压缩。自动字典建立简化了行压缩的使用,使得用户不再需要手工运行表重组来创建字典并压缩数据,字典会在数据进入表示自动建立,在有了字典之后的数据也会自动被压缩,这一过程无需用户干预。

但是,与表重组建立的字典和压缩的数据相比,ADC 创建的字典仅基于很少的一部分数据,因而相对使用离线表重组建立压缩字典而言,ADC 的压缩率较低。如果用户想要得到较高的压缩率,带有重置字典选项的表重组操作还是必要的。

值得注意的是,一个用户表的每个分区下的每个数据分区都有自己的表压缩字典。分区,指的是数据库分区(Database Partition Feature,DPF)环境下的数据库分区;数据分区,指的是范围分区表(Range Partition Table)的数据分区。这两种特性下表中的数据都是物理独立存放的,因此它们都会有自己独立的表压缩字典。本文所提及的表级字典,如果没有特殊说明,均指的是单一数据库分区、非数据分区表中的表级字典。

以上简单介绍了 DB2 V9.7 中已有的表压缩特性,以及如何使用该特性建立字典并压缩表中的数据。以表重组建立字典并压缩数据为例,字典基于创建字典时表中数据而建立,所以该字典能够代表此时表中的数据特征。然而,随着表中的数据发生变化,比如新数据的插入,原有数据的更新,原数据的冗余特征就可能发生变化,而表压缩的字典并不能自动根据这些变化动态发生变化,因此,在数据发生变化时,有时表压缩的压缩率会随着数据变化而衰减。为了缓解这一问题,在最新的 DB2 LUW V10.1 中,引入了压缩新特性——自适应压缩(Adaptive Compression)。

自适应压缩

刚才已经提到,表压缩的字典是静态的,即字典在创建之后不会随着数据的变化而发生变化,唯一能够使字典发生变化的操作就是字典的重建——运行带有重置字典选项的离线表重组操作;同时,表压缩的字典对于整个表来说是全局的(暂不考虑数据库分区特性 Database Partition Feature DPF 下的表,以及范围分区表 Range Partition Table),即字典中的模式是从整个表中采样出来的,从而能够代表整个表的数据特征,因此在字典创建时,能够把全表的数据都压缩得较好。

同时,由于表压缩的字典是静态的,表中的数据在字典创建后发生变化时,字典并不会发生变化,从而使得表压缩的压缩率可能会随着数据的变化而降低;由于表压缩的字典是全局的,代表整个表的数据特征,有可能不能代表该表的某些局部特征,比如,一张表的某几处相邻若干条数据相似度非常高,由于这些冗余仅仅是局部的,并不能代表整张表的数据特征,因此表压缩的字典并不能很好的反映这些冗余,这些数据可能就未能达到最佳的压缩效果。

针对这两个问题,自适应压缩应运而生了。自适应压缩在原有的表压缩基础上,叠加了数据页级别的压缩。自适应压缩的解决方案,是传统表压缩和新的页压缩的组合。页压缩是动态的,在页中的数据达到一定程度时,页字典会自动被建立,并且已有数据会被自动压缩,在页中的数据发生变化后,压缩率衰减到一定程度时,页字典会自动被重建;页压缩的是局部的,它只针对其所在页的数据,因此对于聚簇数据(Clustered Data)压缩效果更好。

页压缩技术也是行压缩的一种,即行是压缩的基本单位,压缩过程中不会将行拆分为列来进行处理。为了区别 V9.1 引入的的表级行压缩技术,本文将其称为表压缩,而将 V10.1 中自适应压缩中的页级行压缩称为页压缩。自适应压缩是二者的组合。

跟操作系统中页的概念类似,DB2 中的数据页是 I/O 的最小单位。用户的数据以及一些系统控制信息都以记录(Record)的形式存放在数据页中。DB2 中数据页的大小是可以定义的,默认是 4KB,除此之外,还有 8KB、16KB 和 32KB。页压缩针对的是同一数据页中的数据,页压缩的字典则是以系统内部记录的形式存放在数据页中的。不同数据页中由于数据不同,因而页压缩字典也不同。

在 DB2 LUW V10.1 中,针对自适应压缩在表定义的 SQL 语句中引入了一个新关键字—— ADAPTIVE,语法如清单 1 所示:

清单 1. 新关键字 ADAPTIVE 的语法

				
      .-COMPRESS NO---------------. 
 >-----+---------------------------+-- 
      |              .-ADAPTIVE-. | 
      '-COMPRESS YES-+----------+-'
                     '-STATIC---'

ADAPTIVE 代表对表启用新的自适应压缩方案,而 STATIC 关键字则代表原有的表压缩方案。在没有指定 ADAPTIVE 关键字时,默认启用自适应压缩,即表压缩加页压缩的组合压缩方案,也就是说,指定压缩选项时不指定压缩类型是 ADAPTIVE 还是 STATIC,此时会隐式采用自适应压缩。如果要只使用原先的表压缩,需要显示指定 STATIC 关键字。

推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
author-avatar
adu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有