1097 :Oracle XML DB
简化 XML 管理
Mark D. Drake
高级产品经理
讲座 id:
如果您想使用 XML……
�您将需要下面的工具包
– 解析器
– DOM 实施
– XSL 处理器
�您将需要决定存储方式
– 文件系统
– 本地 XML 数据库
– CLOB
�您需要新的技能……
利用 DOM 处理 XML
�DOM 编程复杂而冗长
– 每行代码花费 50 美元
– 每天只编写 15 行
– 开发人员调试和编写文档
�更多的编码工作意味着低质量
– 50% 的工作放在修补 bug 上
– 即使这样 — 还有 25% 的 bug
永远修补不了!!!
public void processDOM(
Reader reader,
Writer writer)
throws Exception
{
rser parser;
doc;
nodeList;
parser = new
rser();
(new
InputSource(reader));
doc = ();
nodeList =
("SomeN
ode");
for (i = 0; i <
())
{
/* ... */
}
利用 XML DB 处理 XML
�Oracle XML DB
– 为 XML 提供的简化的 API
– 要编写的代码更少
– 要维护的代码更少
– 成本更低
�当必要时仍可使用更底层的
API
�易于学习
– 成本更低且不失灵活性
select
extractValue
(object_value,
'/PurchaseOrder/Reference'),
extractValue
(value(l),
'/LineItem/@ItemNumber')
from PURCHASEORDER p,
table (xmlsequence
(
extract
(
object_value,
'/PurchaseOrder/LineItems/Lin
eItem[Part/@Id="‘
|| :PARTNO || '"]'
)
)
) l
/
Oracle XML DB 概述
XMLXML类型类型
SQL XMLSQL XMLXML DB
XML DB
信息库信息库
XML XML 模式模式
Oracle XML DBOracle XML DB
Oracle XML DB 概述
�XML 支持 Oracle 数据库
– 支持主要的 XML 标准
– 本地 XML 数据类型
– W3C XML 模式数据模型
– 高性能 XML 信息库
– SQL/XML 操作符
– XML 特有的内存和性能优化
支持的主要 XML 标准
�XML、命名空间
�DOM
�XPath
�XML 模式
�XSL 和 XSLT
�WebDAV
�SQL/XML
本地 XML 数据类型
�用于存储 XML 的抽象数据类型
– 本地服务器数据类型
– 作为表、列、PL/SQL 变量使用
– 支持约束和引用完整性
– 结构化和非结构化的存储选项
�XML 特有的方法支持
– 基于 XPath 的导航和 XML 内容的搜索
– 基于 XPath 的操作和 XML 内容的更新
– 基于服务器的 XSLT 转换
– XML 模式验证
XML 模式
�实例文档的验证
�XML类型结构化存储的基础
– XML 被碎片化和存储为 SQL 对象
– DOM 保真
– 优化的集合管理
– 集合上的 B-Tree 索引
– XPath 表达式的查询重写
– 局部更新
– 按需加载的虚拟 DOM
– 从 XML 模式中自动导出的对象模型
Oracle XML DB 信息库
�基于 IETF DAV 规范的 XML 信息库
– 与文件/文件夹类似的存储和管理内容的方法
– 基于 ACL 的访问控制
– 基本的版本控制支持
�支持 WebDAV、HTTP 和 FTP 协议
– 利用标准工具访问和更新内容
�全面的 SQL 访问和更新
�可使用多种 API 进行编程
�分层索引
– 拥有专利的、高性能的文件夹遍历操作和查询
SQL / XML 互操作性
�从 SQL 查询中生成 XML
– 从 SELECT 语句中生成 XML 文档
– 支持生成复杂的文档
– XML类型视图提供对关系内容的 XML 访问
�XML 内容的 SQL 查询和更新
– XML 内容的基于 XPath 的提取(SELECT 列表)
– XML 内容的基于 XPath 的查询(WHERE 子句)
– XML 内容的基于 XPath 的更新
– XML 内容上的基于 XPath 的关系视图
XML DB 特性
�与 XML 一起使用的更高层的 API ,全面支持
下列功能:
– 生成
– 存储和读取
– 创建索引、搜索
– 查询和更新
– 转换
XML DB 的优点
�降低了应用程序开发成本
– 更快的开发周期
– 降低了编码和维护成本
�提供高质量代码
– 代码更少等同于错误更少
XML DB 的优点
�将 XML 仅作为 XML 存储
– XML 和存储模型之间的自动双向映射
– 文档作为单个数据库对象出现
– 将 I/O 缩短为单次网络回程
– 按需加载的虚拟 DOM ,在适当的时候自动准备数
据
XML DB 的优点
�强健的开发平台
�简单的部署平台
– 消除复杂性
– 减少组件数
�集成的安全性
�Oracle 数据库可靠性、可用性和可伸缩性
XML DB 的优点
�提高的应用程序性能
�用于稀疏转换的高性能 XSLT 引擎
�XPath 重写和基于文本的索引提供了高性能的
查询功能
�XML 信息库为以内容为中心和以数据为中心的
应用程序提供了单个平台
生成 XML
�SQL XML 操作符使得从关系数据中生成 XML
更容易
– SQL 查询的结果集是 XML 文档
�XML类型视图允许对关系数据进行持续的 XML
访问
�XML类型 视图的内容可以作为一个虚拟文档提
供
– 通过 HTTP / WebDAV 或 FTP 直接进行访问
处理 XML 内容
�目前的函数
– ExistsNode() 在文档内或文档间进行搜索
– Extract() 检索部分文档(节点集 nodeSet)
– ExtractValue() 提取标量值
– UpdateXML() 更新一个已有的节点集或标量值
– XMLTransform() 利用 XSLT 进行转换
– SchemaValidate() 对照 W3C XML 模式进行验证
10g 新增的新功能
�用于修改 XML 内容的改进的功能
– InsertXML() — 在节点前增加一个节点
– AppendXML() — 在最后一个节点后增加一个节点
– DeleteXML() — 删除一个节点
� I18N 支持
– 协议服务器现在对字符集敏感
– 客户端和数据库字符集之间的双向转换
– 满足日本和其它亚洲市场的需求
10g 新增的XPath 重写
�XPath 重写增强
– 为更多的 XPath 表达式提供了 XPath 重写
– 进一步优化已有的 XPath 重写
– 在增加或删除集合成员时提供 XPath 重写
– 响应时间显著改善
– 一些功能在 中得到支持
10g 新增的SQL/XML
�为 XML类型视图提供的 XPath 重写
– 基于 SQL/XML 的视图上的重写查询
– 比 快 1000 倍
�XMLParse() 操作符
�显著的性能提高
– 客户测试案例表明比 快 100 倍
– 不需要进行整齐打印
– 一些功能在 中得到支持
10g 新增的加载 XML
�成功获取 750M-1G 范围内的基于模式的 XML
文档
– 32 位 Solaris — 将能够进一步与 64 位结构一起使
用
– 您能这么做并不意味着您应当这么做
�SQL 加载器改善
– 现在支持基于模式的 XMLType 的直接加载
10g 新增的模式的发展
�帮助推动 XML 模式的发展过程
�基于复制的方法
– 将卸载数据和重新加载数据
– 可以使用 XSL 来转换数据,以使其和新的模式兼
容
– 将保留信息库引用
�在以后的版本中将提供适当的改进
10g 新增的统一的 ‘C’ API
�为 XDK 和 XML DB 提供的统一的 ‘C’ XML API
– 函数处理基于文件的 DOM 和基于 XMLType 的
DOM
– 当处理基于 XMLType 的 DOM 时使用 XMLType
特性
10g 新增的展望
�XQuery
�改善的信息库功能
�替代的存储模型
�适当的改进 — 需要您的的实际应用
�进一步提高性能
利用 XML 的能力
�XML 对于现有的应用程序更加高效
– 更廉价的开发人员
– 更廉价和更容易的部署
– 更高的性能
�新的应用程序类别
– 结合文档和数据的类似方法
– 充分利用数据驱动的图形 — SVG
– 基于标记的更好的搜索
Reed Elsevier
�Reed Elsevier 是世界领先的出版商和信息提供商
– 1880 年创立于鹿特丹
– 主要的业务在欧洲和北美
– 全球有 37000 名员工
�Elsevier Science 是技术、科学、健康领域出版物的全
球市场领袖
– 1700 多种杂志
– 5900 万篇摘要
– 全球数百万用户的主要专业信息来源
Elsevier Science
�从 SGML / DTD 移植到 XML / XML 模式
�将内容和元数据存储为 XML
�利用 Oracle XML DB 存储和管理 XML
– XMLType 存储
– 模式验证
– 结合 SQL 和基于 XPath 的查询
�确保具有可伸缩和强健的平台
– 数据库的优势与将 XML 存储在文件中
Temenos
�打包的银行系统
– GLOBUS 集成财务和银行系统
– 在过去的三年中销售排名第一的系统
– 全球主要的银行
� 关键任务
– 高性能
– 实时在线
– 可伸缩的结构
Temenos 内部基准测试
�HP Super-Dome
– 32 个 CPU,168 GB内
存
�每秒 800 次银行操作
�1 次银行操作
– 1 次插入,紧接着
2 次更新
deCODE Genetics
�关于 decode Genetics
– 创立于 1996 年
– 位于冰岛 Reykjavik
�业务焦点
– 医疗遗传学研究
– 基于人口的基因组研究
– 药物研发
– 药物开发
�基础架构
– 一流的基因型分析和生物信息学工具
deCode Genetics:应用程序
�Genetic Survey Server
– 广泛使用调查来收集数据
�目标
– 从纸张转变为在线收集
– 支持编辑和数据捕获
– 使用 XML 来确保灵活性
– 更廉价、更快速、更准确
�从关系存储器向 XML DB 移植
– 表的数量减少 8 倍
– 代码数量减少 4 倍
– 简化的查询
deCODE Genetics
�XML DB 简化了基于 XML 的应用程序数据模型
之前 之后
纯关系型数据
Oracle XML DB
演示
Oracle XML DB
性能性能
什么是集合
�集合是一组拥有相同名称和类似结构的元素
<LineItem ItemNumber="1">
<Description>Duel at Ichijoji Temple</Description>
<Part Id="37429125526" UnitPrice=""
Quantity="3"/
</LineItem>
<LineItem ItemNumber="2">
<Description>The Red Shoes</Description>
<Part Id="37429128220" UnitPrice=""
Quantity="4"/>
</LineItem>
定义集合
�在 XML 模式中,集合使用 maxOccurs
属性来定义
<xs:complexType name="LineItemsType“
<xs:sequence>
<xs:element name="LineItem“
type="LineItemType“
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
使用集合
�一个典型的 XML 文档包含一个或更多的集合
�集合可能是嵌套的
– 集合中可能包含集合
�查询和更新集合提出了最大的挑战
查询集合
�一个集合上的示例查询
获取包含对 “717951002372“ 部分的引用的每个行项目的
引用和项目编号
XPATH :=
'/PurchaseOrder/LineItems/LineItem[Part/@Id="717951002372"]';
select extractValue(_value,'/PurchaseOrder/Reference')
extractValue(value(l),'/LineItem/@ItemNumber')
from PURCHASEORDER p,
table (xmlsequence(extract(_value,XPATH))) l
集合管理
�存储集合的四个选项
– BLOB 存储
�将 SQL 对象存储在单个 BLOB 列中
– 嵌套表存储
�将 SQL 对象作为行存储在嵌套表中
– CLOB 存储
�XML 文本
– XMLType 表存储
�将 XMLType 对象存储在 XMLType 表中
LOB 存储
引用 用户 Id … 行项目
ABANDA …ABANDA-20..
LINEITEM_V
(
LINEITEM_T(...),
LINEITEM_T(...),
LINEITEM_T(...),
LINEITEM_T(...)
)
嵌套表:存储
引用 用户 Id … 行项目
ABANDA …ABANDA-20..
ID 项目编号 说明 部分
Good Morn… …1
Uriah Hee… …21
Sisters …31
The Prince… …41
1
1
CLOB :存储
引用 用户 Id … 行编号
ABANDA …ABANDA-20..
<LineItem ItemNumber="1">
<Description>Good …
<Part Id="3742914 …
</LineItem>
<LineItem ItemNumber="2“
<Description>Uriah..
<Part Id="6950030…
</LineItem>
XMLType 表:存储
引用 用户 Id … 行项目
ABANDA …ABANDA-20..
项目编号 说明 部分
Good Morn… …1
Uriah Hee… …2
Sisters …3
The Prince… …4
Ref, Ref…
ID
XMLType 表:存储
引用 用户 Id … 行项目
ABANDA …ABANDA-20..
项目编号 说明 部分
Good Morn… …1
Uriah Hee… …2
Sisters …3
The Prince… …4
1
1
1
Ref
Ref
Ref
Ref
Ref1
1
FTP 插入性能比较
未创建索引的查询的性能
为集合创建为集合创建
索引索引
为集合创建索引
�作为 LOB 或 CLOB 存储的集合仅可以使用
CtxXPath 索引来创建索引
�作为嵌套表或 Out-of-Line 表存储的集合可以使
用 B-Tree 索引来创建索引
– 集合上的索引在嵌套表或 Out-of-Line 表上创建,
而不在父表上创建
创建了索引的查询的性能
DOMDOM
保真保真
Dom 保真
�需要额外的处理和存储开销
�为每一个例程保留特定的元数据
– 元数据在 SYS_XDBPD$ 属性的 ‘Type’ 层进行
管理
– SYS_XDBPD$ 作为一个(内联的) LOB 存储
您是否需要它?
�可以使用注释 xdb:maintainDOM=“false” 逐一禁用
�不使用命名空间
�没有注释或处理指导
�不关心空的与丢失的元素
�将根据模式(而不是例程)对全部元素和选择的元素进
行排序
�不用担心默认值
�类型不允许为混合文本
Dom 保真
A
Q&问 答