IBM DB2关键特性解析:DB2分区特性

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

数据库在大型企业及企业级应用中,面临着越来越多的挑战,尤其是随着数据量的不断增长,大规模数据管理成为摆在企业及其数据库管理人员面前的最大难题。企业中的数据量越来越大、类型越来越多且实时性越来越强,即所谓的大数据的3V特性(Volume、Variety、Velocity)。数据库每天需要处理大量数据,这些数据可以达到几十或几百GB,甚至可以达到TB或PB级别,企业的经营决策又向数据库提出了实时处理的要求。因此如何能够快速、实时的处理大规模的数据成为解决企业数据库难题的关键。


现阶段,存储介质和数据处理技术发展迅速,涌现了大批新技术,但这些仍不能满足企业数据快速增长的需求。为了加快企业数据读写操作和查询操作的速度,数据库分区技术应运而生。数据库分区是一种物理数据库设计技术,是将一个或多个数据库表分布在两台以及多台物理或者逻辑机器上,通过并行的方式对分布在多台机器上的数据库表进行处理,从而实现对数据的快速处理。数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。


通过数据库分区技术可以提高对大容量数据的访问速度,对数据进行并行读取,并且数据库分区技术在一定程度上具有可扩展性。从架构上来看,数据库分区可划分为三种典型的架构:共享内存(Shared Memory)模式,共享磁盘(Shared Disk)模式以及无共享(Shared Nothing)模式。本文将重点介绍无共享模式的DB2数据库的分区特性,以及DB2与Oracle数据库分区特性的比较。

  DB2数据库分区特性——DPF

  DB2的企业版提供的数据库分区功能,即DPF(Data Partitioning feature),这一功能主要用来为大规模数据处理提供支持。DB2数据库分区采用Share-nothing体系结构,数据库在一个非共享的环境中被分解为独立的分区,每个分区都具有自己的资源,例如内存、CPU和磁盘以及自己的数据、索引、配置文件和事务日志。数据库分区有时称为节点或数据库节点,每个节点具有独立处理单一任务的能力,每个子任务处理一部分数据,分区间数据通过高速网络进行交互。

  DB2 DPF的扩展性较好,通过增加节点资源即可线性扩展节点。简单来说,它相当于将一个大的数据库分成多个小的数据库,而每一个小数据库分区拥有自己的一部分数据,同时达到节点同时并发的高效率处理能力。DPF是一种跨多个彼此合作的实例,以建立单个大型数据库服务器的技术。这些实例既可以位于一个服务器中,也可以跨多个物理机器。


DB2 DPF是基于并行性的体系架构,这里的并行包括在节点之间的并行,以及在节点之内分区的并行;查询语句之间的并行,以及查询语句内部的并行等。在性能方面,采取分而治之的策略,没有限制的规模。在编译器方面,采用基于开销的优化器和查询重写器,SQL和实用工具完全平行运行。除此之外,DPF还根据负载动态分流,同时支持异步I/O和平行I/O等。

 

  DB2 DPF及其他分区特性的比较

  IBM DB2的分区特性包括表分区(Table Partition)、多维聚类(MDC)和数据库分区特性(DPF)。具体对比如下表:

CREATE TABLE 语句中的子句
 DB2 特性名称
 
DISTRIBUTE BY HASH
 DPF —— 数据库分区特性
 
ORGANIZE BY DIMENSION
 MDC —— 多维聚类
 
PARTITION BY RANGE
 TP —— 表分区


DB2 特性名称
 一部分的名称
 用于分区数据的列
 其他术语
 
数据分区特性(Data Partitioning Feature,DPF)
 数据库分区
 分布键(distribution key)
 在之前的版本中,分布键被称作分区键
 
多维聚类(Multidimensional Clustering,MDC)
 单元格,由一些块组成
 维
 块索引
 
表分区(TP)
 数据分区
 表分区键


特性
 特性如何组织数据
 优点
 
DPF
 将行均匀地分布在多个数据库分区上
 可伸缩性 —— 随着数据库的增长增加计算资源(也就是数据库分区)
 
MDC
 将在多维上具有近似值的行放在表中相同的物理位置,即所谓的块
 查询性能 —— 组织数据的方式有利于获得更快的检索速度,对于由多个谓词指定范围的查询尤其有效
 
TP
 将所有行放在同一个数据分区的一个指定范围的维中
 数据移动 —— 通过添加和删除整个数据分区,可以增加和删除大量数据


特性
 适合的表特征
 事实表的特征
 
DPF
 大型表 —— 大到无法仅依靠单独一组 CPU 和 I/O 通道来处理
 事实表是最大的数据库表。它们常常包含数亿行数据,有时候甚至包含数千亿行数据
 
MDC
 结果集返回在多个维上具有近似值的行的查询
 事实表(以及通常所说的数据仓库)是为支持这种类型的查询而设计的
 
TP
 这种类型的表:周期性地添加大量数据,然后在数据到期后又删除大量数据
 在事实表中,常常是每天都添加新数据。通常每月或每个季度删除过时的数据
 


分区特性设计决定
 经验法则
 
DPF —— 用作分布键的列
 首选是具有很多不同值的列
 
MDC —— 用作 MDC 维的列
 一种典型的设计是选择一个表示日期的列,再加上 0 到 3 个其他列,例如 region 和 product_type
 
TP —— 用作表分区键的列和分区的数量
 选择一个基于时间的列。定义与每次转出的数据量相符的分区


DPF 是最老的特性,通过它可以将数据库分成多个数据库分区。每个数据库分区有它自己的一组计算资源,包括CPU和存储。MDC是在DB2 Version 8中引入的,通过它可以在物理上将在多维上具有类似值的行聚合在一起放在磁盘上。这种聚合能为常见分析性查询提供高效的I/O,提高检索数据的效率。TP是在DB2 9中引入的,与MDC类似,它也可以将具有近似值的行存储在一起。TP 不同于其他特性的优势在于为表添加或删除大量数据这个方面,即转入和转出。

  数据库分区、表分区和MDC能同时应用在一个设计中。要部署大型应用程序,最好在同一个数据库设计中实现数据库分区、表分区和MDC,以满足应用的多样化需求。可以应用数据库分区获得扩展性,并确保在逻辑分区之间均匀分布数据;表分区可以方便查询分区消除和数据转出;MDC可以用来提高查询性能和方便转入数据。

 

  DB2分区特性与Oracle的比较

  DB2和Oracle所支持的分区特性既有相似之处,也有一定区别。除了Oracle不支持的MDC以外,其他功能类似,只是语法上有所区别。具体对比如下表:

Oracle分区
 DB2分区
 Oracle 10g语法
 DB2 V9语法
 
区间分区

(Range Partitioning)
 表分区

(Table Partitioning)
 PARTITION BY

RANGE
 PARTITION BY

RANGE
 
哈希分区

(Hash Partitioning)
 数据库分区

(Database Partitioning)
 PARTITION BY

HASH
 DISTRIBUTE BY

HASH
 
列表分区

(List Partitioning)
 带生成列表分区

(Table Partitioning

With Generated Column)
 PARTITION BY

LIST
 PARTITION BY

RANGE
 
不支持
 多维集群

(Multidimensional

clustering)
 无
 ORGANIZE BY

DIMENSION


以数据库分区为例,DB2的数据库分区特性采用Share-nothing架构,这种架构允许多个数据库分区在一起并行工作来处理工作负载。在Oracle中,使用Share-disk架构。那么这两种架构有何区别呢?Share-nothing是指每个CPU都有私有内存区域和私有磁盘空间,而且两个CPU不能访问相同磁盘空间,CPU之间的通讯通过网络连接。而Share-disk是每个CPU使用自己的私有内存区域,通过内部通讯机制直接访问所有磁盘系统。这是DB2可以增加物理的partition来给数据库扩容的原因,也是DB2与Oracle分区的最大区别。


如下所示,是DB2中创建数据库分区表partition_table的语句,其中选择partition_date字段作为分区键:

  CREATE TABLE partition_table

  (partition_date date NOT NULL,

  partition_data VARCHAR(20) NOT NULL

  )

  IN tbsp_parts

  DISTRIBUTE BY HASH (partition_date);
Oracle也支持数据库分区特性,语法不同也略有。如下所示,使用PARTITION BY HASH来建立数据库分区:

  CREATE TABLE hash_table

  (

  hash_part date,

  hash_data varchar2(20)

  )

  PARTITION BY HASH(hash_part)

  (partition p1 tablespace tbsp1,

  partition p2 tablespace tbsp2

  );
该语句表示创建了hash_table表,此表按照hash_part字段进行哈希分区,每个分区以循环的方式放置在表空间tbsp1和tbsp2中。

  总结

  本文介绍了IBM DB2数据库的分区特性:数据库分区(DPF)、多维聚类(MDC)和表分区(Table Partition),及其内部的区别与联系,以及DB2分区特性与Oracle等价功能之间的对比。相信通过本文读者能够对DB2分区特性有更深入的认识。如果想了解更多有关DB2特性的解析,请关注后续文章。
 








本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/800157,如需转载请自行联系原作者
目录
相关文章
|
16天前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
33 3
|
18天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
36 3
|
20天前
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
69 2
|
1天前
|
PHP 开发者
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
|
1天前
|
安全 编译器 PHP
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用
|
4天前
|
Kubernetes Cloud Native 调度
云原生批量任务编排引擎Argo Workflows发布3.6,一文解析关键新特性
Argo Workflows是CNCF毕业项目,最受欢迎的云原生工作流引擎,专为Kubernetes上编排批量任务而设计,本文主要对最新发布的Argo Workflows 3.6版本的关键新特性做一个深入的解析。
|
11天前
|
PHP 数据安全/隐私保护 开发者
PHP 7新特性解析与实践
【10月更文挑战第20天】本文将深入浅出地介绍PHP 7的新特性,包括性能提升、语法改进等方面。我们将通过实际代码示例,展示如何利用这些新特性优化现有项目,提高开发效率。无论你是PHP新手还是资深开发者,都能从中获得启发和帮助。
|
20天前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
18 4
|
25天前
|
安全 编译器 PHP
PHP 7新特性深度解析与实践
【10月更文挑战第7天】在这篇文章中,我们将探索PHP 7带来的新特性和改进,以及如何利用这些新工具来提升你的代码效率。从性能优化到语法简化,再到错误处理的改进,本文将带你深入了解PHP 7的核心变化,并通过实际代码示例展示如何将这些新特性应用到日常开发中。无论你是PHP新手还是资深开发者,这篇文章都将为你提供有价值的见解和技巧。
36 6
|
3天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
9 0

热门文章

最新文章

推荐镜像

更多