DB2 Version 9.5 pureXML的增强和新特性(一)

日期: 2009-03-10 来源:TechTarget中国 英文

DB2 9XML支持概述

DB2 9引入了原生XML数据类型。它将XML存储为一种经过解析的分层(原生)格式,并允许用户使用XQuery和SQL/XML语言查询数据。DB2XQuery表达式将存储在DB2数据库中的XML文档用作XML的查询源。函数xmlcolumn和sqlquery用来连接存储在数据库中的XML值,并为XQuery解析器提供XML序列。

除了XQuery语言,DB2 9还提供了SQL/XML函数在单个查询中同时处理XML数据和关系数据。SQL/XML函数xmlquery、xmltable和xmlexists有助于将XQuery嵌入到SQL语句中。

DB2 9还支持模式验证。它引入了新的命令和存储过程,用于将模式注册到数据库并充当数据库对象。在插入操作之前或之后,可以用xmlvalidate函数根据已注册的模式验证XML值。也可以对模式进行注释,以便于将XML数据分解为关系表。诸如xmlelement、xmlattributes等发布函数可用来将关系值转换为XML文档。DB2 9也针对XML数据支持对一些实用工具(导入、导出等等)进行了更新。更多关于Version9中的XML支持请参见参考资料部分。

DB2 V9.5的新特性

在处理XML数据方面,现有的DB2 9功能非常强大。DB2 V9.5增强了一些现有特性并引入了其他功能,以使XML处理更加强大和高效。下面是本文将要讨论的功能列表:

◆支持在非Unicode数据库中使用XML

◆子文档更新

◆基础表存储/压缩

◆兼容的XML模式演化

◆验证触发器

◆验证检查约束

◆XML复制

◆XML联合

◆XML载入

◆sqlquery()参数

◆用户友好的发布函数

◆SQL/XML函数的默认参数传递

◆XSLT函数

◆XML分解增强

◆XML索引增强

◆索引顾问程序(Indexadvisor)和优化器增强

◆DB2DataWeb服务

以下小节的大多数代码示例都基于DB2 V9.5示例数据库。可以从DB2 V9.5命令行处理器运行db2sampl命令来创建示例数据库。也可以通过firststep来创建。firststep是DB2提供的一个工具,在安装了DB2之后就会执行,也可以在以后通过在Windows中选择Start>AllPrograms>IBMDB2>db2copyname>Setuptools>firststeps来执行。

支持在非Unicode数据库中使用XML

DB2 9只允许用户使用UTF-8代码页创建包含XML数据的数据库。这意味着,即使XML文档中的值是ASCII格式的,也需要存储到UTF-8格式的数据库中。DB2 V9.5去掉了这个限制,并且允许用户用任意代码集创建包含XML列的数据库。由于去掉了这个限制,即使数据库不是用UTF-8格式创建的,用户也可以更改一个表以添加XML列,或者创建一个包含XML列的新表。

以下代码创建了一个示例数据库和包含一个XML列的示例表:

清单1.使用默认代码页的数据库


db2 CREATE DATABASE sampledb
db2 CONNECT TO sampledb
db2 CREATE TABLE record(id INT, record XML)
子文档更新

DB2 V9.5允许用户更新存储在数据库中的XML文档的一部分。它引入了XQuerytransform表达式,该表达式使用4个更新表达式—— insert、delete、replace和rename来修改XML文档片段。transform表达式是XQuery语言的一部分,因此可以用在 XQuery表达式中。对于DB2 V9.5,一个transform表达式中只能使用一个更新表达式。一个transform表达式有以下子句:
◆COPY:transform表达式的copy子句将源XML值绑定到一个变量。更新表达式将会在查询中对该副本进行处理。

◆MODIFY:modify子句根据更新表达式修改复制的XML值。在MODIFY子句中可以使用多个更新表达式。

◆return:return子句返回修改后的值。

下面将解释这4个更新表达式:

1.insert表达式将一个新的XML节点插入到现有XML文档中。可以在XML文档指定插入的位置.

2.replace表达式用来更新特定节点的特定值。

3.delete表达式用来从XML文档删除特定节点。

4.rename表达式用来对节点进行重命名。

由于transform表达式是XQuery语言的一部分,因此可以在包含xmlquery函数的SQL语句中使用它,也可以用于更新语句来更新XML值。

清单2中的代码更新了示例数据库中customer表的info列。它更新XML文档以使用cid关系列的值匹配CID属性。

清单2.更新表的transform表达式


UPDATE CUSTOMER
SET info =
XMLQUERY(‘transform
copy  $po := $INFO
modify
do replace value of $po/customerinfo/@Cid  with $CID
return  $po’
passing info as “INFO”, cid as “CID”)
WHERE cid=1000

如果在表的XML列上存在XML验证检查约束,在手动更新或者通过触发器更新之前,用户可能需要验证新的XML值。

以下代码示例从purchaseorder表中删除一个条目,并将修改后的文档作为查询结果。

清单3.transform表达式


xquery
transform
copy
$po := db2-fn:sqlquery(‘select porder from purchaseorder where
custid = 1002 and orderdate=“2006-02-18”’)
modify
do  delete $po/ PurchaseOrder/item[partid = “100-201-01”]
return  $po

示例xupdate.db2给出了transform表达式的不同例子。可以在sqllib/samples/xml/xquery/clp目录下找到此示例。

基础表行存储/压缩

在DB2 9中,XML数据和关系数据存储在不同的位置。这个存储位置称作XML数据区域(XMLdataarea,XDA)。DB2 9将所有XML文档存储在这个存储位置,这意味着访问XML值和关系数据需要更多I/O。如果XML文档较小,而且在存储关系值之后页面大小仍足够容纳XML值,那么将XML存储在相同的页面能够提供不错的性能收益。这些收益包括:

压缩:因为XML数据和关系数据存储在一起,因此可以使用DB2 9中引入的压缩技术对XML数据进行压缩。由于XML值比关系数据大,所以可以获得较高程度的压缩。

查询性能:由于XML数据和关系数据存储在相同位置,因此直接插入XML数据使得基础表比一般情况下要大。如果XML数据的访问频率与表中的其他关系值相当,那么这将提高查询数据的性能。

DB2 V9.5引入了XML数据的基础表行存储。这意味着如果每行的关系数据和XML数据的总大小没有超过1页面的大小,这两种数据就可以存储在相同的物理页面。只有当一个记录的总大小没有超过页面大小时,才能够对XML数据进行基础表行存储。如果是这样,XML数据就会像通常一样存储在XML存储位置。DB2中允许的页面最大值为32KB,因此一个XML值的最大插入长度也被限制到32KB。如果文档的内部树表示的大小比指定的插入长度小,它们将会被插入。清单4中的代码所创建的表可以对XML数据进行基础表行存储:

清单4.XML数据的基础表存储


db2 CREATE TABLE emp1(id INT, info XML INLINE LENGTH 1024)

使用 INLINE 选项指定将 XML 数据跟关系数据存储在一起。这对于要获取的数据都位于相同位置的查询来说很有利。另一方面,对于访问非 XML 数据的查询,这可能导致需要更多的 I/O 才能找到关系数据。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • 数据库产品巡礼:IBM DB2概览

    IBM DB2关系型数据库管理系统提供了支持多平台系统的关键技术,它具备较高的可用性和良好的性能。

  • 如何进行分布式大数据应用调优

    分布式环境通常是与数据库服务器相分离的。而DBA的工作就是监视这些环境并配置和优化数据库服务器以满足多种需求。大数据的出现加剧了DBA的问题。

  • IBM DB2将迎来30岁“生日”

    再过几天,主流数据库产品DB2就将迎来它30岁的“生日”。作为关系型数据库技术的标志性产品,DB2在过去的30年中也在伴随用户需求的变化不断地发展。

  • SQL调优之“忧”:如何进行SQL调优

    DBA们应该将自己从“我要对什么调优?”的老路上解放出来,而在指标、配置和成本方面花费一定的时间。