数据库在大型企业及企业级应用中,面临着越来越多的挑战,尤其是随着数据量的不断增长,大规模数据管理成为摆在企业及其数据库管理人员面前的最大难题。企业中的数据量越来越大、类型越来越多且实时性越来越强,即所谓的大数据的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,如需转载请自行联系原作者

IBM DB2关键特性解析:DB2分区特性相关推荐

  1. 4.2.4 Kafka高级特性解析(物理存储、稳定性:事物,控制器,可靠性,一致性,_consumer_offsets、延时队列、自定义重试队列)

    Kafka高级特性解析 文章目录 Kafka高级特性解析 2.5 物理存储 2.5.1 日志存储概述 2.5.2 日志存储 2.5.2.1 索引 2.5.2.1.1 偏移量 2.5.2.1.2 时间戳 ...

  2. 攻防世界 适合做桌面_FIFA足球世界球员特性解析:精神篇

    亲爱的小伙伴们,相信大家经过前两篇的解析对球员特性在攻防方面的作用有了一定的认知,那么今天就为大家带来球员特性解析的最后一篇,这篇里的球员特性主要是对于球员在场上的精神力方面发挥着一定的作用,那就是& ...

  3. GreenDao3.0新特性解析(配置、注解、加密)

    Greendao3.0release与7月6日发布,其中最主要的三大改变就是:1.换包名 2.实体注解 3.加密支持的优化 本文里面会遇到一些代码示例,就摘了官方文档和demo里的例子了,因为他们的例 ...

  4. 墨天轮访谈 | SelectDB 衣国垒:Apache Doris(incubating)1.0版本特性解析与未来规划

    分享嘉宾:衣国垒 Apache Doris Committer.SelectDB 联合创始人&CTO 整理:墨天轮社区 导读 大家好,我是来自Apache Doris社区的衣国垒,也是Sele ...

  5. 【转】Silverlight 3 Beta 新特性解析(7)- Child Window和Shader Effect篇

    前提条件: 阅读本文之前请确认你已经安装了如下软件 Visual Studio 2008 (Express) SP1 Silverlight 3 Tools For Visual Studio Mic ...

  6. 数据结构特性解析 (四)LinkedList

    描述 LinkedList应该也是开发中比较常用的数据结构了,其基于链表数据结构实现,添加和删除效率相对比较高,而随机访问效率偏低 特点 1.LinkedList是双向不循环链表 通过查看链节点类: ...

  7. 数据结构特性解析 (二) ArrayList

    前言 ArrayList可能是Java中使用次数最多的数据结构了,因此了解其特性比较重要 描述 ArrayList是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长. 并且Ar ...

  8. 数据结构特性解析 (一) 数组

    前言 数组是java中最基本的数据结构,有很多更高级的数据接口实现方式都是使用的数组,所以了解数组是很重要的 描述 数组是一个对象,内部有一块连续的内存,自身只占用很小的内存,其他位置都是根据长度和类 ...

  9. python3.8新特性 逻辑表达式_Python3.8正式发布!新特性解析在这里

    Python3.8正式发布!新特性解析在这里 诗书塞外 Python程序员 10月14日,Python 3.8 正式版发布.这也意味着一个Python开发周期的结束,和另一个开发周期的开始.Pytho ...

  10. hive分区用2个字段有何限制_[特性]Hive动态分区功能使用

    [特性]Hive动态分区功能使用 2016-01-31 21:40 说明 Hive有两种分区,一种是静态分区,也就是普通的分区.另一种是动态分区.动态分区在数据导入时,会根据具体的字段值自行决定导入, ...

最新文章

  1. HDU 4944 逆序数对
  2. Java程序员从笨鸟到菜鸟之(一)开发环境搭建,基本语法,字符串,数组
  3. 用户控件如何控制ASPX页面的控件
  4. MFC复选框CheckBox使用
  5. Spring Boot整合@CacheEvict注解使用
  6. tcp丢包一定会断线吗_有遗传就一定会脱发吗
  7. css单位介绍em ex ch rem vw vh vm cm mm in pt pc px
  8. 程序员在家办公没显示屏,我被领导鄙视了
  9. mac 安装php swoole扩展
  10. Python爬虫之Scrapy框架结构
  11. jieba分词怎么操作_如何运用jieba库分词
  12. python中isupper是什么意思_Python string isupper()用法及代码示例
  13. python清除历史记录_只需python两行代码,就能获取你的浏览器历史浏览记录
  14. 华师大计算机学硕分数线,华东师范大学2021考研复试分数线已公布
  15. Java项目服务器cpu占用过高怎么办?
  16. 手把手教大家在mac上用VMWare虚拟机装Ubuntu
  17. mysql在手游中的作用_数据库虚拟化技术_手游业务MySQL数据库虚拟化漫谈 | By 肖力-云栖社区...
  18. 一文多发神器--ArtiPubOpenWrite
  19. Java练习题 类 编写一个程序,使用复数类Complex验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。
  20. [词根词缀]reg/rept/rid/rod/rot等衍生单词

热门文章

  1. atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
  2. atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结
  3. Atitit.数据库新特性战略规划 mssql sql server 2008 SQL2012 SQL2014
  4. XSS跨站点脚本攻击解决方案
  5. (转)如何看待美国监管机构要求文艺复兴基金提交源码?
  6. Julia: 关于SubString
  7. 如何做到数百万台车联网设备同时在线 0 故障
  8. 【旗帜识别】基于matlab GUI旗帜识别【含Matlab源码 157期】
  9. 【语音识别】基于matlab GUI MFCC+VQ说话人识别系统【含Matlab源码 1153期】
  10. 【路径规划】基于matlab GUI机器人路径规划【含Matlab源码 1007期】