商业关系型数据库 IBM DB2新特性概述
通常,管理和共享XML数据的一般方法效果不好。文件系统可以应付简单的任务,但是在需要处理大量文档时它们就表现得不好了。并发性、恢复、安全和可用性问题变得难以管理。商业关系数据库管理系统(DBMS)解决了这些问题,但是在其他方面有所欠缺。它们常常提供两种基本的数据库设计选项 —— 将每个 XML 文档完整地存储为一个大型对象,或者将它 “撕开”,分散存储在多个表的多个列中。在许多情况下,这些选项都会导致性能问题、管理困难、查询的复杂性增加和其他问题。最后,纯 XML DBMS 在 IT 基础设施中引入了一种新型的环境,但是这种环境还没有经过考验,它的集成能力、需要的人员技能以及未来的生命力还不确定。
Linux、Unix 和 Windows 平台的 DB2 “Viper” 版引入了另一个可能。这个新的 beta 版可以非常好的支持 XML 数据。为此,IBM 对 DB2 进行了扩展,使其包含:
新的存储技术,可以高效地管理 XML 文档中固有的层次结构。
新的索引技术,可以提高在 XML 文档之间和内部进行搜索的速度。
新的查询语言支持(对于 XQuery)、新的图形化查询构建器(对于 XQuery)和新的查询优化技术。
根据用户提供的模式检验 XML 数据的能力。
新的管理功能,包括对关键数据库工具的扩展。
与流行的应用程序编程接口(API)的集成。
一定要注意,DB2 对 XML 的 “固有” 支持是在对其他技术的现有支持之外 提供的,SQL、表格数据结构和各种 DBMS 特性等现有支持仍然存在。因此,用户可以用一个数据库对象同时管理 “传统的” SQL 数据和 XML 文档。而且,可以编写一个查询同时搜索和处理这两种数据形式。
本文在介绍 DB2 对 XML 的固有支持的同时将研究这些特性。但是,我们先考虑一下为什么说正确地管理 XML 数据是很重要的。
潜在的好处
越来越多的公司开始转到 XML 技术,从而帮助他们实现面向服务的体系结构(SOA)、在不同的系统和应用程序之间交换数据并适应快速变化的业务环境。许多 IT 领导者正在寻找办法高效地共享、搜索和管理公司产生的大量 XML 文档和消息。DB2 新的 XML 支持的设计目的就是为了帮助公司减少存储和使用 XML 数据所需的时间和工作量,进而减少开发费用并提高业务灵活性。
例如,“结合使用 DB2 原生 XML 与 PHP”(developerWorks,2005 年 11 月)解释了 DB2 新的 XML 支持如何减少支持电子商务 Web 站点所需的数据库设计和应用程序代码的复杂性。“Managing XML for Maximum Return”(IBM,2005 年 11 月)讨论了顾客对对比测试场景的体验,这些测试表明新的 XML 支持可能减少工作量和开发时间。
这些好处的背后是什么?DB2 使用户能够完整地存储 XML 文档,同时 DBMS 完全掌握文档的内部结构。这样就避免或减少了其他解决方案涉及的管理任务和程序设计任务。另外,它可以加快文档之间和文档内部的搜索,使顾客能够更快地适应 XML 模式中反映出的业务需求变化。
体系结构概述
DB2 使客户机应用程序能够通过它们选择的查询语言 —— SQL(包括具有 XML 扩展的 SQL,常常称为 “SQL/XML”)或 XQuery —— 同时处理表格数据结构和 XML 数据结构。如 图 1 所示,DB2 中的引擎级组件支持用这两种语言指定的查询。

图 1. 新的 DB2 “Viper” 版的体系结构
为了高效地管理传统 SQL 数据类型和 XML 数据,DB2 包含两种不同的存储机制。我们将简要地讨论新的 XML 存储技术。但是,一定要注意,给定数据类型所用的底层存储机制对于应用程序是透明的。换句话说,应用程序不需要显式地指定要使用的存储机制,也不需要管理存储的物理方面,比如如何将 XML 文档的各个部分拆分到多个数据库页上。系统会自动采用适合目标数据的格式,应用程序自然而然地获得存储和查询数据方面的运行时性能优势。
让我们从用户的视角看看新的 DB2 XML 特性。
逻辑存储
XML 文档集合存储在 DB2 表中,这些表包含一个或多个新的 XML 数据类型的列。这使管理员能够使用熟悉的 SQL 数据定义语言(DDL)语句来创建存储 XML 数据的数据库对象。但是,这个熟悉的接口隐藏了一个事实:DB2 以不同的方式存储 XML 数据。它使用新技术来存储 XML 数据的层次结构,并支持高效地搜索原始 XML 数据的所有部分。
为了用户易于集成传统形式的业务数据和 XML 数据,DB2 管理员可以创建同时包含传统 SQL 数据类型列和新的 XML 数据类型列的表。下面是这种表的一个例子:
清单 1. 创建包含 XML 列的表
create table items (
id int primary key not null,
brandname varchar(30),
itemname varchar(30),
sku int,
srp decimal(7,2),
comments xml
)
这个表的前 5 列使用传统 SQL 数据类型来保存每件商品的销售信息,包括它的 ID 号、品牌名、商品名、库存单位(SKU)和建议的零售价(SRP)。“comments” 列包含 XML 数据,这是关于此商品的顾客反馈。
注意,在创建具有 XML 列的表时,并不指定 XML 数据的内部结构。这是故意的。XML 文档是自我描述的,它们的内部结构差异很大。DB2 对存储 XML 数据的惟一要求是它必须是 “良构的(well formed)” —— 也就是说,它必须符合 “W3C XML 标准”(参阅 “参考资料”)中指定的某些语法规则。这种宽松的方式给用户提供了很大的灵活性,更容易存储包含不同属性和内部结构的 XML 文档集合;由于业务需求或业务情况常常变化,有时候可能缺少某些信息,所以 XML 文档的属性和结构很不一致。
但是,用户可能希望确保 XML 数据符合他们自己的结构规则,因此要求 DB2 在进行存储之前对数据进行检验。这将在 “XML 模式和检验” 一节中详细讨论。这主要涉及创建 XML 模式(也是 W3C XML 标准的一部分)并向 DB2 注册这些模式。(关于 XML 模式的更多信息,请参阅 “参考资料”。)
现在,您可能想知道用户如何用 XML 数据填充 DB2 表。答案很简单 —— 使用两种熟悉的 DB2 机制之一。SQL INSERT 语句和 DB2 IMPORT 工具可以处理 XML 数据和其他数据类型(DB2 IMPORT 在幕后会发出 INSERT 语句)。如果您想知道 DB2 为什么只支持通过 SQL 而不是 XQuery 来插入数据,答案也很简单 —— 刚出现的 XQuery 第一版主要关注数据库读取活动,而不是写入活动。在还没有被业界明确接受的标准的情况下,IBM 提供两种用户熟悉的方法,用户可以选择其中之一来存储 XML 数据。(关于 XQuery 标准的更多信息,请参阅 “参考资料”。)
关注我们


