基于xml数据的特点,xml数据的高效管理通常有着以下的应用。
xml可以有效地表达复杂的数据。这些复杂的数据虽然利用关系数据库也可以进行管理,但是这样会带来大量的冗余。比如说文章和作者的信息,如果利用关系数据库,需要分别用关系表达文章和作者的信息,以及这两者之间的关系,这样的表达,在文章和作者关系的关系中分别需要保存文章和作者对应的ID,如果仅仅为了表达文章和作者之间的关系,这个ID是冗余信息,在xml数据中对象之间的关系可以直接用嵌套或者ID-IDREF的指向来表达。此外xml数据上的查询可以表达更加复杂的语义,比如XPath可以表达比SQL更为复杂的语义。因此利用xml对复杂数据进行管理是一项有前途的应用。
互联网上的数据与传统的事务数据库与数据仓库都不同,其特点可以表现为模式不明显,经常有缺失信息,对象结构比较复杂。因此在和互联网相关的应用,特别是对从互联网采集和获取的信息进行管理的时候,如果使用传统的关系数据库,存在着产生过多的关系,关系中存在大量的空值等问题。而xml可以用来表达半结构数据,对模式不明显,存在缺失信息和结构复杂的数据可以非常好的表达。特别在许多web系统中,xml已经是数据交换和表达的标准形式。因此xml数据的高效管理在互联网的系统中存在着重要的应用。
现代信息集成系统超越了传统的联邦数据库和数据集成系统,需要集成多种多样的数据源,包括关系数据库、对象-关系数据库以及网页和文本形式存在的数据。对于这样的数据进行集成,xml这样既可以表达结构数据也可以表达半结构数据的形式成为首选。 而在信息集成系统中,为了提高系统的效率,需要建立一个cache,把一部分数据放到本地。在基于xml的信息集成系统中,这个cache就是一个xml数据管理系统。因此xml数据的管理在信息集成系统中也有着重要的应用。
开发难点解决之道
在实际的xml数据库以及基于xml的信息集成系统的开发过程中。笔者遇到了一些技术难点,在解决这些难点的过程中,有一些经验是值得借鉴的参考的。
1.关系数据库中复杂查询的优化
在基于关系数据库的xml数据管理系统中。在没有建立索引的情况下,系统的性能非常低,为了提高系统的性能,我们在编码上建立了索引,经过分析,由于在系统中最常做的操作是a.x b.y的join操作,最好的选择是建立二维索引,由于我们的后端数据库没有对二维索引的支持,我们选择了在x和y属性上分别建立B+树的方法。使得系统性能得到了提高。此外,我们发现,在对嵌套查询进行翻译的过程中,如果嵌套查询的结果可能过大,对嵌套查询的结果建立临时表可以提高系统的性能。
经验总结:对于一个数据库应用,需要对其workload进行分析,根据workload建立索引;对于执行效率很慢的查询或查询集合,可以通过分析查询计划找出系统的瓶颈进行处理。
2.复杂数据库系统的调试
在调试xml数据的管理系统中,多次出现了小规模数据执行准确,效率很高,而大规模数据执行错误或执行效率很低的情况。对于这种情况,我们采取了定位错误、猜测错误, 继而加以解决的策略,也就是首先确定出现错误的操作,使得错误的出现具有可重复性,然后通过逐步删减数据,确定数据出现在哪些数据上,这样就使得调试设计的操作和数据的规模大大减小了,然后根据经验对错误进行猜测,逐步排除错误。
经验总结:对于数据规模大、操作复杂的数据库系统的调试,首要任务是让错误可以重现,然后把次要因素逐步排除,最后发现问题的所在。
3.复杂数据库系统的测试
由于系统需要处理各种各样的xml上的查询,为了确保系统的健壮性,需要选取多种具有代表性的查询对系统进行测试。为了选取这样的查询,我们考察了xml上影响查询的不同参数,包括查询的长度、查询中包含的关系种类、查询的选择性和查询中约束条件的选择性,根据这些参数,我们分别选择有代表性的查询对系统进行测试。
经验总结:对数据库系统的测试集合的选择,必须考虑到可能查询的多种因素;在数据库系统的设计和测试过程中,对数据库系统可能用于处理的查询集合,需要有深入的了解。