XML数据库探讨

最近一直在研究XML方面的内容,对XML在数据结构化保存交换所表现出来的强大的生命力而感到衷心的折服。虽然我对数据库方面或者对XML方面也不过还是处于刚刚入门的阶段。但并不妨碍我对XML数据库的探索。我在这里写出我的一些想法,希望有同道中人一起努力,抑当是我抛砖引玉,希望以后能成为一个开源的项目,打破欧美厂商在这方面的技术垄断。

好了,废话不说,首先说说XML数据库的概念。一般来说XML数据库有两种,一种是纯粹的XML数据库,也就是数据的存储元是利用的XML结构的,通常称之为Native-XML数据库,另外一种,数据的存储还是我们常用的关系型数据库,但是存取利用XML(其实就可以看作是普通的数据库加上了一个支持XML的封装)。我想叙述的是前一种native-XML 数据库。
  首先,不得不承认我对关系型数据库的研究并不深入,基本上是由于工作需要,在ASP或者VB,Java程序中用过一些SQL文和SQL Server,InterBase等轻量级的数据库。所以我归纳出来的关系型数据库需要改进的地方也学并不正确和完备。但是,任何事情都是两方面的,不深入的了解,也减少了思维的限制,让我在设计XML数据库的时候,少了很多束缚,让我有了更多的想象空间。这里我先列举一下我认为关系型数据库所存在的问题:一,对海量的数据查找不太容易,性能较低,尤其是全文检索。二,数据分布式存储不容易实现。三,对存储在不同服务器,不同位置的数据不容易整合。四,面对越来越多的XML数据,转化存储力度不够。五,不太容易实现字段数据类型的自定义。六,不能在数据表中存贮一个对象。七,不能用更贴近客观描述的世界关来记录数据(在关系型数据库中,一切数据都是用“关系”来连接的)。八,受限于厂商,不容易二次开发,和扩展自己数据库的功能。九,访问方式的复杂化。十,不能与现有的Web无缝连接。十一,数据保持,在这个版本中的数据,不见得能被下个版本的DB Server所读取。

同样的,对于XML数据库(就是native-XML数据库,以下简称XMLDB)来说也有很多难于跨越的鸿沟,导致了经过这么多年的发展,最终却一直没有壮大。参考网站:http://www-900.ibm.com/developerWorks/cn/xml/x-xdata/part5/index.shtml#1 的叙述,关于XMLDB现在有以下一些问题:(以下是引用的内容)
存储
在资源库中存储信息很简单。如果希望存储的信息已经是 XML 格式,那么可以直接把它添加进资源库。这也许听起来不错。毕竟在不断创新的 Web 服务世界中,将要到来的多数信息将使用嵌入在 SOAP 消息中的 XML 片段格式。然而,把 XML 文档分解并保存到关系数据库一点也不困难;当开始查看希望支持的其它功能时,这种作法会有一些好处。同样许多本 Native-XML 数据库供应商所鼓吹的一个好处是 Native-XML 数据库能够存储和查询异种的文档结构。再说,对于结构化数据问题在于:您真的希望信息的结构千变万化吗?对于使用 XML 文档时具有的这种优势,当使用结构化数据时就算不上是一种优势了。
检索
初看上去,从 Native-XML 数据库检索信息似乎也是一个好处:以信息的原始 XML 格式检索它,而不需任何附加的编码,并且可以使信息以一定的样式显示。然而,结构化数据检索的性质使得这种明显的优势实际上变成了劣势。如果信息更新量巨大(例如,接收单个数兆字节大小 XML 文档的股票系统的夜间更新),一些 Native-XML 平台需要从数据库返回整个文档 — 即使您只对文档的很小一部分感兴趣(譬如某个特定股票的变化过程)。 其它 Native-XML 平台在将 XML 文档保存到资源库之前进行分解,但是如果具有复杂的文档结构(正如许多结构化 XML 文档倾向于具有这种结构)时,这样做就显得有点笨拙。无论如何,许多关系数据库供应商目前正在实现瘦 XML 序列化器包装器以便支持在需要时从关系数据生成 XML 文档。这使得程序员可以容易地获得完成特定任务所恰好需要的信息,这些信息具有某种格式,这种格式具有所需样式、或者可以发送给其它能识别 XML 的目标。
搜索
搜索 Native-XML 数据库有两种常规解决方法可用,选取哪种取决于数据库供应商。一些 Native-XML 数据库需要选择哪些元素或属性用于索引,如同在关系数据库里选择哪些列用于索引。然后,这个信息被用于建立索引,以便搜索机制能用来快速定位相匹配的文档。在文档被添加到资源库时,其它 Native-XML 数据库就是对文档内的所有信息建索引,可以想象这将导致存储空间需求飞速上升(想象一下在关系数据库中对所有列建索引!)。由于这些数据库以文档为中心的性质,搜索将返回一组 XML 文档;然后如有必要,调用程序还得对这些文档做进一步处理。 很遗憾的是,这意味着更复杂的搜索,是很不方便的。例如,要找出那个对某一特定部分提交最高订单的顾客,以为在中间环节要处理很多事情。在指向关系方面 Native-XML 数据库做的也不好。结果是,如果数据结构不是纯粹层次结构的,则对您而言,Native-XML 数据库就不是恰当的解决方案。大多数 Native-XML 数据库具有这一功效强大的特性 — 执行完善的全文搜索的能力,包括整个同义字支持、字根(匹配一个字的所有形式:现在时、过去时和进行时)以及相近搜索(DTD NEAR XML Schema)。此外,在使用传统文档时,这些特性是不可缺少的,其中上下文在含意上起着重要的作用,而当使用结构化数据时,就远没有那么重要了。
聚合
使用关系数据工作时,聚合是所需要的最重要功能之一,事实上它处于联机分析处理的核心(OLAP)。Native-XML 数据库在执行聚合任务方面表现得特别差。因为信息要么被保持在文档这一层,要么一般被分割成节点,所以把信息汇集起来以及集中处理它(求和、平均数等等)就很困难,此外,还必须在中间环节增加附加代码。如果结构化数据应用程序需要任何一种分析处理 — 我打赌它会需要 — Native-XML 数据库将会使您失望。