热门标签 | 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的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
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社区 版权所有