下面,我们从技术点和性能两大方面对比DB2 9与Oracle 10g XML技术的差异。前面已经分析过Oracle通过大对象和拆分两种方式来支持XML的存储。我们分别针对两种方式来跟DB2 9的Native XML技术作比较。
(一) Oracle基于大对象CLOB的存储方式
|
XML操作
|
DB2 9 Native XML
|
Oracle非结构化大对象存储
|
|
存储方式
|
预先解析,磁盘上存储类似XML DOM树结构
|
CLOB
|
|
查询的时候是否需要解析?
|
不需要
|
需要
|
|
支持任意节点或属性上的索引?
|
支持
|
不支持重复出现节点上的索引
|
|
XML存储字段允许多个Schema ?
|
允许
|
允许
|
|
XML文档可以没有Schema ?
|
允许
|
允许
|
|
XML的灵活性?
|
允许
|
允许
|
|
子文档更新
|
支持
|
需要解析 编码
|
|
全文索引支持
|
通过NSE实现,可以支持XPATH路径确定的子文档上的全文检索
|
通过CTX支持全文索引;但不能够针对XPATH子树检索
|
(二)Oracle基于拆分的存储方式
|
XML技术点
|
DB2 9
|
Oracle 10g
结构化存储
|
|
存储
|
Native (层次)
|
(对象-)关系
|
|
XML文档没有Schema
|
允许 J
|
不允许 L
|
|
每个字段是否支持多个Xml Schema?
|
允许 J
|
不允许 L
|
|
Schema发生变化 灵活性
|
支持 J
|
不支持 L
|
|
Native XQuery 查询
|
支持 J
|
不支持 L(需要翻译成SQL)
|
|
支持任意 XQuery
|
支持
|
否 (需转成SQL或借助外部Java引擎)
|
|
需要多次Join获取文档内容
|
不需要 J
|
需要 L
|
|
任意节点属性上创建索引包括重复节点
|
支持 J
|
很困难/做不到
|
|
子文档更新
|
9.5版本支持
|
转化成SQL更新
|
注:在 Oracle 数据库 10g 第 2 版中,Oracle 也引入了XQuery 引擎,但存储结构等没有发生变化。