一、 xml数据库的概念及分类
Xml虽然已出现很多年,但在前些年通常只被做为数据交换文件来使用,或作为软件配置文件,较深层次的应用较少。随着xml数据使用的越来越多,迫切需要一种能够直接处理xml数据的数据库来管理这些结构或半结构化的数据。之前处理xml数据都是在作为文本存储在关系数据库中。由于xml数据格式是层次关系,而且同类文件格式也可能不同,用关系数据库很难表示,更严重的是使用关系数据库保存xml数据无法对xml数据中结点进行检索。使用新型存储格式及检索方式已是必然。随着处理xml文件的一些方法被定义为标准,例如XPath、XQuery等。Xml数据库的应用才越来越广泛了。
Xml数据库即使用xml文件作为数据存储格式的数据库。根据数据库实现模式,xml数据库分为:
1、可以使用xml文件的数据库(Enable-XML Database):数据库内部含有处理xml数据的模块,可以和xml数据文件交换数据,即实现了xml数据的读取,写入,删除,更新等操作,但数据库本身并不是为xml数据设计的。
当前比较流行的数据库oracle,Ms SQL Sever,IBM DB2,Ms Access等都属Enable-XML Database类型。目前大部分关系数据库都支持xml数据。关于Enable-XML Dabase数据库产品,可以参考“XML Database Products_ XML-Enabled Databases.pdf”文档。
此类数据由于底层实现模块中并不是专为xml数据设计,所以在使用xml文件数据时必须通过使用类似ODBC、JDBC等接口程序进行数据交换。接口程序把xml数据读入数据库并转换成数据库可以识别的数据格式后才能操作数据,操作完的数据在通过接口程序转换成xml数据格式,这使得执行效率大幅降低。
2、纯xml数据库(Native-XML Database):满足一下3个条件的就是纯xml数据库:
1)、为xml文档定义了一个逻辑模型,xml数据的存储和查询都基于这个模型。这个模型至少要包含元素、属性以及PCDATA等,并保持文档顺序。
2)、将xml文档作为逻辑存储的基本单位,正如关系数据库将行作为存储的基本单位一样。
3)、不要求只能使用某一特定的底层物理模型或某种专有的存储格式。
数据以纯xml文件格式保存,存储在数据库中的内容与原xml文件格式可以保持一致,数据库引擎直接操作xml数据文件,并通过XPath或XQuery检索数据。相对于Enable-XML Database数据库,由于省去了数据转换过程,在处理xml数据时相对效率较高。
目前纯xml数据库产品或单独的xml数据库引擎也有许多,较有代表性的产品有dbXml、Berkeley DB XML等。有代表性的xml数据库引擎有eXist、Xindice等,本次所作的所有的分析与测试都是基于eXist与Xindice数据库引擎。关于目前Native-XML Database数据库产品的介绍可以参考“XML Database Products_ Native XML Databases.pdf”文件。
纯Xml数据库由于可以保持原xml文件的物理格式不变,并且可以按照原格式检索,所以有时候纯xml数据库也被称作原生态数据库。如果当前有许多xml文件但文件又格式不尽相同的话,使用xml数据库是个不错的选择,通过数据库来管理这些xml文件。利用XPath和XQuery也能够更方便的查找数据。但是由于目前用于xml数据库的一些操作没有明确的标准导致xml数据库的引擎各有不同。
二、 纯xml数据库的优缺点
纯Xml数据库应用还不是很广泛,这一点我们从目前市场上的主要数据库产品就可以看出来。大型数据库没有使用纯xml数据库的。至少在上面提到的产品列表文件中没有见到大型数据库的身影。但是这也并不代表xml数据库没有优势。下面将对纯xml数据库和关系数据库做个比较。
优点:
1、可以直接操作xml文件,对于处理大量xml文件,纯xml数据库有着先天的优势:不必转换数据。这样就减少了系统资源消耗。普通的关系数据库在处理xml数据时必须通过xml接口处理程序来转换数据。这方面xml数据库的处理效率明显高于关系数据库。
2、存储在xml数据库中文件可以保持原文件的物理格式不变。由于xml文件是自描述的,即文件内部不仅包含了数据还包含了对这些数据的描述信息。比如数据结构和类型。如果数据描述信息较多,关系数据库就显得力不从心了。
3、原生检索方式,这时纯xml数据库独有的特点,即纯xml数据库允许用户使用对未作任何格式转变的数据直接检索。这就使得同一检索式可以同时检索不同格式xml文件。原生检索方式对于拥有大量不同格式的xml文件的用户来说是最好的检索方式。
4、以分层的树形结构描述数据,能够检索各个结点。
缺点:
1、数据冗余度高,由于xml文件中带有大量非数据的内容,也许这些内容比数据本身还要多,不仅占用大量的磁盘空间,还会给操作文件带来困难。假如你需要在一个1GB的文件中间频繁插入或删除数据。
2、检索效率低下,如果数据访问速度不高,检索就可想而知了。前面提到的检索效率高是指在xml数据库中和关系数据库中都只处理xml数据时。但相对于关系数据库中的普通数据来说。纯xml数据库还远达不到这样的高效。这也是妨碍纯xml数据广泛应用的的主要缺陷。曾有人使用eXist作过一些测试,测试过程中,如果在1GB大小的xml文件检索一个数据,所消耗的时间大概是煮一杯咖啡的时间。
3、纯xml数据库的XQuery语言标准不完善,现在XQuery语言的中不支持插入、删除、更新操作,即使是部分xml数据库厂家提供了类似功能,也不能得到广泛的应用,因为没有标准。它不能够像SQL那样功能强大。也由于这个缺陷给开发基于xml数据库的应用程序带来更多风险,只能针对某种数据库开发,而且许多本应由XQuery本身提供的功能,比如插入、删除、更新功能不得不由应用程序开发人员开发。
三、 本次测试中所使用的纯xml数据库介绍
本次测试中所使用的纯xml数据库有两个,分别是eXist 1.0版和Xindice 1.1B4版,都是目前最高版本。关于它们如何安装使用请参考文档“eXist数据库.doc”和“Xindice数据库.doc”。这里只对最后测试结果作一简单的介绍。
| eXist | Xindice |
安装方便程度 | 方便 | 一般 |
使用方便程度 | 方便 | 一般 |
程序稳定性 | 不稳定 | 不稳定 |
在1M数据中检索 | 少于1秒 | 堆栈溢出 |
10M | 索引前20秒,索引后3秒 | 堆栈溢出 |
100M | 堆栈溢出 | 堆栈溢出 |
300M | 堆栈溢出 | 堆栈溢出 |
500M | 堆栈溢出 | 堆栈溢出 |
800M | 堆栈溢出 | 堆栈溢出 |
1000M | 堆栈溢出 | 堆栈溢出 |
| | |
测试总结:
这两个数据库引擎非常不稳定,而且性能不好。
四、 选择纯xml数据库还是关系数据库?
这是一个比较重要的问题,虽然它们都是数据库,但是除了数据库本身有许多不同之外,在使用上也是大不相同。在项目中使用哪种数据库还需要慎重考虑,根据上面的数据库的对比分析,大体可以总结一下在何种情况下使用哪种数据库:
1、 如果当前有许多xml文件,并且xml文件的格式不统一或者用表格的方法难以表示,那么这时最好选用纯xml数据库。
2、 如果在以后的工作中会产生大量格式或半格式的xml文件,那么选用纯xml数据库较合适。
3、 如果经常使用xml文件作为数据交换格式,则选择纯xml数据库较好。
4、 如果你的数据之间有较多的关联,就最好选用关系数据库。纯xml数据库只能表示简单的数据关系。
5、 如果对数据库的性能要求较高的话,最好使用关系数据库,关系数据库已发展成熟,而纯xml数据库目前发展还不完善,比如,插入,删除、更新操作还未有标准。