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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 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,如需转载请自行联系原作者
目录
相关文章
|
23天前
|
PHP 开发者
PHP 7新特性深度解析与实践应用
【9月更文挑战第17天】本文将深入探讨PHP 7的新特性及其对开发者的实际影响,同时通过实例演示如何有效利用这些特性优化代码和提高性能。我们将从类型声明的增强开始,逐步深入到其他关键改进点,最后通过一个综合案例展示如何将这些新特性应用于日常开发中。
|
1月前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术特性与用户体验的深度解析
在移动操作系统的战场上,安卓和iOS一直占据着主导地位。本文将深入探讨这两大平台的核心技术特性,以及它们如何影响用户的体验。我们将从系统架构、应用生态、安全性能和创新功能四个方面进行比较,帮助读者更好地理解这两个系统的异同。
54 3
|
2月前
|
机器学习/深度学习 API PHP
PHP 7新特性深度解析与应用实践深入浅出:用深度学习识别手写数字
【8月更文挑战第27天】随着PHP 7的发布,这个广受欢迎的Web开发语言带来了许多令人兴奋的新特性。本文将深入探讨这些新特性,并展示如何在实际项目中利用它们来提升代码的性能和可维护性。无论你是PHP新手还是资深开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
|
21天前
|
PHP
PHP 7新特性解析与实践
【9月更文挑战第19天】在这篇文章中,我们将深入探讨PHP 7的新特性,以及如何在实际开发中应用这些新特性。我们将通过代码示例,详细解析PHP 7的性能提升,新的操作符,空合并操作符,标量类型声明等新特性,并分享一些实践经验和技巧。无论你是PHP新手还是老手,这篇文章都将帮助你更好地理解和掌握PHP 7的新特性。
|
22天前
|
自动驾驶 物联网 5G
深入解析5G NR(新无线电)及其主要特性
深入解析5G NR(新无线电)及其主要特性
65 2
|
27天前
|
PHP
PHP 7新特性深度解析与实践
【9月更文挑战第13天】本文将深入探讨PHP 7的新特性,包括性能提升、语法改进、错误处理等方面。我们将通过实例代码来展示这些新特性的使用方法和优势,帮助您更好地理解和应用PHP 7。
|
1月前
|
编译器 PHP 开发者
PHP 7新特性深度解析
在这篇文章中,我们将深入探讨PHP 7带来的一系列新特性,包括性能提升、语法改进等方面。通过对比分析,我们将揭示这些变化如何影响开发者的编码实践和应用程序的性能优化。
|
1月前
|
编译器 PHP 开发者
PHP 8新特性解析与应用实践
PHP 8作为PHP语言的最新版本,带来了许多令人兴奋的新特性和性能改进。本文将深入探讨PHP 8中的JIT编译器、联合类型、匹配表达式等关键更新,并通过实例演示如何在项目中有效利用这些新工具,帮助开发者提升代码质量和执行效率。
|
2月前
|
Java API
Java 8新特性:Lambda表达式与Stream API的深度解析
【7月更文挑战第61天】本文将深入探讨Java 8中的两个重要特性:Lambda表达式和Stream API。我们将首先介绍Lambda表达式的基本概念和语法,然后详细解析Stream API的使用和优势。最后,我们将通过实例代码演示如何结合使用Lambda表达式和Stream API,以提高Java编程的效率和可读性。
|
14天前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。

热门文章

最新文章

推荐镜像

更多