深入解析:DB2 V10.5新特性列式存储表的优点与缺点

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 相对于列存储,行存储的好处是增加修改数据容易,适合于 OLTP 事务型应用。

1.什么是列组织表

列组织表技术是 DB10.5 BLU 引入的新技术,按列组织的表,更加方便了复杂的查询,如果将这种表格式与星型模式数据集市配合,那么可以简化设计和调优,从而显著改进存储性能、查询性能和易用性

2.列组织表的管理方式

image

可以看到行组织模式的表是都是存放在一起的,而列组织模式的表是被分开保存的。

3.列存储使用环境

列存储主要适合 OLAP 类型应用,比如数据仓库系统,数据挖掘系统,决策支持系统等。这些系统有一些共同特征:数据量大,查询语句比重大,复杂的查询多。

4.如何启用列存储

官方文档上描述的是将 DB2_WORKLOAD 注册表变量设置为 ANALYTICS,更改后重启便会生效。这样做有助于配置内存、表组织、页大小和扩展数据块大小,并且会启用工作负载管理。

4.1更改环境变量

[db2inst1@enmodb2 ~]$ db2set DB2_WORKLOAD=ANALYTICS
[db2inst1@enmodb2 ~]$ db2set -all
[i] DB2_WORKLOAD=ANALYTICS
[g] DB2_COMPATIBILITY_VECTOR=MYS
[g] DB2SYSTEM=enmodb2
[g] DB2INSTDEF=db2inst1
AI 代码解读

4.2创建列组织测试表

[db2inst1@enmodb2 ~]$ db2 "create table  testinfo (empno char(6),lastname varchar(15),hirdate date,salary decimal(9),comm decimal(9)) organize by column"
DB20000I  The SQL command completed successfully.
AI 代码解读

用户在没有指定 organize by 的情况下可以将数据库参数 dft_table_org 设置为 COLUMN,缺省就是创建列组织表。

4.3添加数据
有选择的导出 employee 的数据。

[db2inst1@enmodb2 ~]$ db2 "export to '/home/db2inst1/export/employee.del' of del messages exp_employee.msg select empno,lastname,hiredate,salary,comm from employee"
AI 代码解读

Number of rows exported: 42

将数据导入 testinfo 中。

image


image

4.4查询数据
然后对数据进行查询。

image


image

4.5行组织表与列组织表的对比

image

image

同样的查询在行组织表与列组织表的区别,在进行全表扫描,或者几个列全扫描的时候,列组织表可以发挥出很大的优势,在列式存储中同类型的数据存放在同一个block里面,压缩性能比较好。而且在列式存储中,任何列都可以作为索引。

5.列式存储优点

5.1自动回收空间
当 DB2_WORKLOAD 设置成 ANALYTICS 的时候,对于列组织表默认会开启 reorg,这个时候 DB2 的列组织表就会处于一个自动维护的状态。DBA 也不用再对一些表进行定期的 reorg 操作,而且存储空间支持在线释放,不会影响系统的正常运行。

[db2inst1@enmodb2 ~]$ db2 update db cfg using AUTO_REORG on
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
[db2inst1@enmodb2 ~]$ db2 update db cfg using auto_maint on
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
[db2inst1@enmodb2 ~]$ db2 update db cfg using auto_tbl_maint on
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
[db2inst1@enmodb2 ~]$ db2 restart db testinfo
DB20000I  The RESTART DATABASE command completed successfully.
Automatic maintenance                      (AUTO_MAINT) = ON
Automatic table maintenance          (AUTO_TBL_MAINT) = ON
Automatic reorganization               (AUTO_REORG) = ON
AI 代码解读

测试自动回收空间

[db2inst1@enmodb2 ~]$ db2 get db cfg |grep reorg
     Automatic reorganization               (AUTO_REORG) = ON

[db2inst1@enmodb2 ~]$ db2 "select count(0) from testinfo"

1          
-----------
   16252928
[db2inst1@enmodb2 ~]$ db2 "delete from db2inst1.testinfo where salary<500000"
DB20000I  The SQL command completed successfully.
[db2inst1@enmodb2 ~]$ db2 runstats on table DB2INST1.TESTINFO
DB20000I  The RUNSTATS command completed successfully.
[db2inst1@enmodb2 ~]$ db2 "select RECLAIMABLE_SPACE from
> Table(SYSPROC.ADMIN_GET_TAB_INFO('DB2INST1','TESTINFO'))"

RECLAIMABLE_SPACE   
--------------------
                   0
AI 代码解读

5.2 减少 IO
在某些环境下,对于行存储是按行存放的,在读取的时候需要将整行的数据都读出,这样无形中增加了数据的 IO。而列存储的存储方式是按列存储,任何列都可以作为索引,只读出所需访问的列,读取时冗余很少,从而减少了 I/O,提高了性能。

5.3良好的压缩比
当 UTIL_HEAP_SZ 足够大,能使得在转换成列存储表之后获取很好的压缩比。对于传统的压缩技术了来讲,可以很大程度的节省存储,某些压缩算法甚至可以不需要解压缩而实现对数据的直接操作,节省了解压缩的开销,从而降低了对 CPU 的消耗。经过优化后的数据库,很多压缩数据会存储在内存中,减少查询时消耗的内存资源。

6.列式存储缺点

6.1筛选条件限制
如果查询中有筛选条件,这样列式存储未必就能发挥相应的优势,而且相对资源消耗可能会比行式存储更高。

image

image

6.2不支持 GBK 字符集
而且在 DB2 中,列式存储只支持数据库 UTF-8 并且国家地域必须为 cn。因为unicode里面好像不支持 GBK,如果是 GBK 字符集的数据库,创建列组织表的时候直接会报错,提示该数据库的字符集不支持。

[db2inst1@enmodb2 ~]$ db2 connect to coco
Database Connection Information
 Database server        = DB2/LINUXX8664 10.5.9
 SQL authorization ID   = DB2INST1
 Local database alias   = COCO
 [db2inst1@enmodb2 ~]$ db2 get db cfg 

 Database Configuration for Database 

 Database configuration release level                    = 0x1000
 Database release level                                          = 0x1000

 Database territory                                                  = cn
 Database code page                                              = 1386
 Database code set                                                 = gbk
 Database country/region code                               = 86
 Database collating sequence                                 = UNIQUE
 Alternate collating sequence              (ALT_COLLATE) = 
 Number compatibility                                              = OFF
 Varchar2 compatibility                                             = OFF
 Date compatibility                                                    = OFF
 Database page size                                                 = 32768
AI 代码解读

创建列组织表

[db2inst1@enmodb2 ~]$ db2 "create table  testinfo (empno char(6),lastname varchar(15),hirdate date,salary decimal(9),comm decimal(9)) organize by column"
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL1233N  The statement failed because the statement includes the use of 
functionality that is supported only in Unicode databases or Unicode databases 
with specific database collations, but the current database is not a Unicode 
database or is a Unicode database with unsupported database collations.  
SQLSTATE=560AA
AI 代码解读

6.3必须存储于自动存储表空间
必须将列存储表存储在自动存储的表空间里面。

[db2inst1@enmodb2 ~]$ db2 "create  tablespace mytem02 pagesize 32K managed by database using (file '/home/db2inst1/tbs/mytem02' 10M) bufferpool IBMDEFAULTBP"
DB20000I  The SQL command completed successfully.
[db2inst1@enmodb2 ~]$ db2 "create table  testinfo3 (empno char(6),lastname varchar(15),hirdate date,salary decimal(9),comm decimal(9)) organize by column in mytem02"
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL0284N  Table creation failed because the table space "MYTEM02" that was 
specified in the statement after the clause "IN" is not a supported type of 
table space for that clause.  Table space type: "MANAGED BY DATABASE".  
SQLSTATE=42838
>>>
AI 代码解读

7.总结

相对于列存储,行存储的好处是增加修改数据容易,适合于 OLTP 事务型应用。列存储表在进行查询的时候需要占用大量的内存,同时列存储表中的数据是按照列存储的,这样的组织方式不太适合查询单行或者几行数据,这就决定了列存储表不适合 OLTP 的系统,因此不是所有的表都适合转换成列存储表。但是在某些场景下,比如数据仓库,在对数据进行查询时可以实现数据跳读,从而进一步降低数据库的 IO,提升查询的性能。

原文发布时间为:2018-07-18
本文来自云栖社区合作伙伴“数据和云 ”,了解相关信息可以关注“数据和云 ”。

目录
打赏
0
0
0
0
73532
分享
相关文章
Tablestore深度解析:面向AI场景的结构化数据存储最佳实践
《Tablestore深度解析:面向AI场景的结构化数据存储最佳实践》由阿里云专家团队分享,涵盖Tablestore十年发展历程、AI时代多模态数据存储需求、VCU模式优化、向量检索发布及客户最佳实践等内容。Tablestore支持大规模在线数据存储,提供高性价比、高性能和高可用性,特别针对AI场景进行优化,满足结构化与非结构化数据的统一存储和高效检索需求。通过多元化索引和Serverless弹性VCU模式,助力企业实现低成本、灵活扩展的数据管理方案。
193 12
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
119 7
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
116 7
C# 9.0 新特性解析
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
92 1
iOS 14隐私保护新特性深度解析####
随着数字时代的到来,隐私保护已成为全球用户最为关注的问题之一。苹果在最新的iOS 14系统中引入了一系列创新功能,旨在增强用户的隐私和数据安全。本文将深入探讨iOS 14中的几大隐私保护新特性,包括App跟踪透明度、剪贴板访问通知和智能防追踪功能,分析这些功能如何提升用户隐私保护,并评估它们对开发者和用户体验的影响。 ####
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
PyPI 存储库中的 JarkaStealer:深入解析与防范措施
63 2
|
5月前
|
PHP 7新特性深度解析
【10月更文挑战第40天】随着PHP 7的发布,这个广泛使用的语言带来了许多令人兴奋的新特性和性能改进。本文将深入探讨PHP 7的主要变化,包括类型声明、错误处理机制、性能优化等方面,帮助开发者更好地理解和应用这些新特性。
70 5
|
5月前
|
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
91 2
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等