0

0

DB2中分发映射兼容的方法和实现

php中文网

php中文网

发布时间:2016-06-07 17:54:05

|

1224人浏览过

|

来源于php中文网

原创

数据库版本兼容的问题是很重要的问题,从 DB2 V9.7 开始分发映射(distribution map)从 4096 个条目扩展到了 32768 个条目 ,我们要如何实现分发映射的高低版本的兼容呢?

本文介绍并实现了一种方法,在遇到 db2 低版本时将分发映射数组的副本扩展到和高版本一样的、包含 32768 个条目的大小,这样处理之后即可对不同版本做相同的处理,如调用分发数据的 api 进行数据的分发。

开发 DB2 程序的时候,低版本的兼容问题是我们不得不考虑的重要问题之一,你一定希望自己写的程序对 DB2 的所有版本都是支持的,至少是一些大家常用的 DB2 版本,比如 v9.7 和 v9.5。

在用 DB2 提供的 API 编写应用数据库分区功能的程序时,经常会用得到分发映射(distribution map),开发者可以将分发映射数组作为参数然后调用相应的 API 把数据分发到对应的数据库分区上。对于 V9.7 及以上的版本,这个 API 为 db2GetRowPartNum,其明确指出在调用这个 API 的时候参数中的分发映射必须是包含 SQL_PDB_MAP_SIZE_32K(32768)个条目的数组。现在问题出现了,V9.5 及更早版本的 DB2 数据库的分发映射只含有 SQL_PDB_MAP_SIZE_4K(4096)个条目,我们要同时支持版本 V9.5 和 V9.7,数据分发要如何实现呢?

或许我们可以对 V9.5 和 V9.7 区别对待,当连接的数据库为 V9.5 时,调用从 V9.7 开始就不推荐使用的 sqlugrpn API 并传入 4K 条目的分发映射数组,这个分发成功的一个前提是在调用这个 API 之前将注册变量 DB2_PMAP_COMPATIBILITY 设为 ON;当 DB2 为 V9.7 时,调用 db2GetRowPartNum 并传入 32K 条目的分发映射数组。

这当然是一个办法,但两个 API 具体参数不同,让实现这个程序变得复杂;还要判断 DB2 的版本并分别作出处理。

这个版本兼容问题的另外一种解决办法就是在遇到低版本的 DB2 的时候,我们将得到的分发映射的副本从 4K 个条目扩展到 32K 个条目。我们知道分发映射中各个数据库分区的出现是有一定循环规律的,在找到这个规律之后,完全可以正确地扩展。

下面讲解分发映射中各个数据库分区的重复规律和如何通过代码来扩展分发映射数组。

注:本文只讨论建立在多数据库分区的数据库的 IBMDEFAULTGROUP 数据库分区组的情况。本文所介绍的方法和实现的程序所用到的结构,API 等是基于 V9.7 版本的。本文不讨论不同机器字节存储次序不同的问题,即认为是相同的。

分发映射的简要介绍

在一个多数据库分区的数据分区组中,分发映射包含多个数据库分区,并且每个数据库分区在分发映射中是重复出现的。如果一个数据库建立在 4 个数据库分区上, 数据库分区的编号为 0 到 3,那么这个数据库的 IBMDEFAULTGROUP 数据库分区组的分发映射则为(以包含 32K 个条目的分发映射为例):

图 1. 包含 32K 个条目的分发映射
包含 32K 个条目的分发映射

jquery带商品分类侧边栏列表的商城导航菜单
jquery带商品分类侧边栏列表的商城导航菜单

这是一款使用jquery制作的带商品分类侧边栏列表的商城导航菜单。该商城菜单兼容ie8浏览器。用户可以通过点击左侧的下拉菜单来查看各种商品的列表,非常实用和方便。 使用方法 在页面中引入样式文件style.css和jquery.min.js文件。

下载

上图是包含 32K 个条目的分发映射,可以看出数据库分区 0 至数据库分区 3 是重复出现的。当 DB2 的版本是 V9.7 和以上版本的时候,调用 db2GetDistMap API 得到的分发映射的副本就是形如上图所示的包含 32K 个条目的;而在 DB2 的版本是 V9.5 或更早版本的时候,调用 sqlugtpi API 得到的分发映射副本就只包含前面 4K 个条目。

值得注意的分发映射的“边界值”

我们经常用 4 个数据库分区,编号为 0 到 3 来举例介绍数据库分区功能或者是分发映射,这样的情况下,“边界值”第 4096 个, 第 8192 个和第 16384 个条目是编号为 0 的数据库分区。但各个数据库分区是在整个的 32K 个条目的分发映射中循环重复,还是在 4K 个条目的分发映射中循环重复,之后在整个 32K 个条目的分发映射中每 4K 个条目重新循环重复?

换句话说,如果有奇数个、如 3 个数据库分区,32K 个条目的分发映射是什么样的,“边界值”又是怎样的?

通过连接 V9.7 或更高版本的数据库,并调用 db2GetDistMap API,我们得到的分发映射副本形如下图所示:

图 2. 3 个数据库分区组成的数据库分区组的分发映射
3 个数据库分区组成的数据库分区组的分发映射

从上图可以看出所有的数据库分区并不是在整个分发映射以一种循环顺序重复出现,因为如果这样的话,上图标蓝的条目应该沿顺前一个条目的顺序,出现编号为 1 的数据库分区而不是编号为 0 的。实际上 32K 个条目的分发映射是每 4K 个条目开始一个新的循环,而 4K 个条目内各个数据库分区是循环重复出现的。

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.4万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.5万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号