IBM 提供了 DB2 Spatial Extender,用于在 DB2 Universal Database TM 关系数据库中存储、管理和分析空间数据。空间数据是用结构化的类型存储在数据库中的,这样才能为其复杂的属性建立正确的模型,也才能通过一种更简单、更可靠的方式来利用那些专用的多维索引方法。
DB2 Information Management 产品家族的另一个关键组件是 DB2 Replication 套件。这个套件可以对从多个数据库中选出的数据集进行维护。对数据进行的修改可以从一个数据库的某张表拷贝到另一个数据库中的另一张表。DB2 复制是 DB2 Universal Database v8 的集成特性。它的复制能力使之适合于处理 DB2 的内置数据类型,如 INTEGER、DOUBLE 或 VARCHAR 等。目前,复制中并没有对已有空间数据的内置支持,也不能在用户需要的时候直接将空间数据复制到另外的数据库中。
本文描述了一种方法,可以用 DB2 中已有的复制机制对空间数据进行复制,具体方法是先将空间数据转换成基于 LOB 的外部表现形式,然后复制这些 LOB。在目标数据库上,我们施行相反的转换过程,再次构造出 DB2 Spatial Extender 能够理解的几何图形。这种方法要求在设置复制的时候进行一些小的修改。我将在本文中逐步解释必要的设置过程,这样您就能很轻松地理解,并在您自己的环境中应用这种方法了。
理解空间数据与复制
空间数据的作用是,在对象-关系型数据库系统中用标量值的形式表示复杂的空间特性。所谓空间特性,是指点、线、多边形,以及上面这些特性的集合。有了 DB2 Spatial Extender,您就具备了必要的数据类型与功能,可以在 DB2 数据库中对空间数据实施管理。只要您的数据库启用了空间功能,您就可以回答诸如“所有具有一定收入的顾客离我的商店有多远?”或“我是不是在某段特定的时间范围和某块相同区域内规划了多个建筑群?我能否将其合并?”之类的问题。 DB2 Spatial Extender 定义了一组数据类型和功能,可用于管理空间数据库(几何图形),也可以帮助您充分利用存在于您的数据中的空间信息。
空间数据类型是通过类型层次来组织的,可为您提供更高的抽象级别以及更好的类型安全性。不准确地说,SQL 中的类型层次等同于面向对象编程语言中的类层次。 图1向您展示的是空间类型的层次关系。用蓝色背景表示的类型代表不可实例化的类型。这些类型就好比 Java 或 C++ 程序语言中的抽象类。其他所有的类型都是可实例化的。
图 1. DB2 Spatial Extender 的类型层次关系
![]() |
DB2 Spatial Extender 中包含了 100 多个不同的函数,可用于对空间数据进行操作。比如说,您可以测试一个几何图形是否包含在另一个之中,或者,您可以计算两个几何图形之间的距离。
很多种不同的用户情景中都用到了数据复制。举个例子来说,复制可以实现多个不同的用户组在公用的数据上独立工作,被复制的那部分数据仍然可以保持同步。复制也为高可用的实现提供了一种方法。
图2概要描述了 DB2 复制的基本工作原理。用户的应用程序发出针对某一源表(source table)的查询(SELECT)及数据更改语句(INSERT、UPDATE、DELETE)。这张表中的数据会复制到另一个数据库上的另一张表中,我们把后面这张表称为目标表(target table)。在源表中对数据所作的修改会记录在 DB2 日志中。异步的 Capture 进程会读取日志记录,当它检测到对源表进行了修改时,就从日志记录中将变化的数据取出,放到一张中转表中,这张表叫做变化数据表(change-data table,即 CD 表)。另一个进程 Apply 周期性地扫描 CD 表,如果其中出现新的信息,这个进程就将其读出,然后发布到目标表上。Apply 进程可以处理多个目标表。因此,DB2 复制的架构遵循经典的发布/订阅机制。
![]() |
| 500 |
在下一节中,我将要描述一种方法,它可以用 DB2 及其复制工具提供的一些特性对空间数据库进行复制。转换函数和转换组的概念在空间数据复制中的重要性更高,在结构化类型的转换函数一节中我们将对其进行更详细地讨论。在捕获空间数据中的变化一节中,我们要介绍如何通过设置,捕获源(捕获)数据库上的空间(或其他类型)数据中发生的变化。本节将展示 CD 表和视图的定义方法,并解释 Capture 进程的工作原理。在准备目标数据库一节中,我会告诉您,应该用什么样的方式准备目标数据库,Apply 进程才能直接将空间数据分别存储到对应的表中。为进一步简化源数据库和目标数据库的设置过程,我们实现了一个命令行工具,您可以从本文的“下载”部分找到这个工具。有关这一工具的详细信息将在设置工具“db2se repl”一节中讨论。本文以若干条对 DB2、空间信息以及复制特性的注解结束。
