热门标签 | 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 关键字。

推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文介绍了如何使用Power Design(PD)和SQL Server进行数据库反向工程的方法。通过创建数据源、选择要反向工程的数据表,PD可以生成物理模型,进而生成所需的概念模型。该方法适用于SQL Server数据库,对于其他数据库是否适用尚不确定。详细步骤和操作说明可参考本文内容。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
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社区 版权所有