论文部分内容阅读
经过多年的研究与应用实践,基于relation数据库引擎扩展XML管理功能已成为共识。目前,各大商用数据管理系统DB2,ORACLE,SQL SERVER以及开源数据管理系统(MonetDB,GALAXY,xlndice等)均支持XML数据的管理与查询。但是,随着各重点行业应用中XML应用的日益扩展,XML数据的查询越来越成为应用中的瓶颈。各种查询算法被陆续提出,有的注重性能要求却对XPath的部分重要功能不能支持,有的功能比较健全却性能表现一般。目前使用的XML查询算法,例如TwigStack(学术界提出的算法)和TurboXpath(DB2开发的算法,Oracle的查询算法思想也类似),它们的使用都有某些局限性。TwigStack算法的性能出众,但是功能有局限,它不能支持含有通配符*’的查询语句,不能支持小枝(Twig)之间是‘OR’关系的查询语句。TurboXPath算法针对XML数据流开发,访问数据流中的所有元素,对于存储在数据库中的XML而言,访问所有元素会大大降低查询性能。 本文在深入调研分析已有工作的基础上,提出了基于一种有效存储结构的XML查询算法TurboStack,并在双引擎数据库管理系统中进行了验证。具体工作包括:⑴设计了一种XML的存储结构:目前流行的XML的存储结构主要是nativeXML存储,它有利于建立索引从而提高查询性能,有利于XML数据的更新操作等等优点。本文设计的存储机制既可有效节省存储空间,又能提高XML查询算法对xml存储原始文件的访问效率,进而提高了查询效率;⑵提出了一种XML的编码方式:在XML的查询匹配过程中,要对不同元素之间的结构关联进行判断,常见的有parent/child,ancestor/descendant,sibling,preceding/following等。对这些关系的判断主要依靠XML的编码进行。XML的编码既要能满足对各种关系的判断,又要容易存储,不会浪费很大空间;⑶提出了一种XML的query算法TurboStack:TurboStack使用堆栈结构存储中间结果,使用倒排索引能迅速获取与XPath上的节点名字匹配的所有元素。Turbostack算法可在单个元素出栈时判定该元素是否满足XPath的结构过滤要求,只需将堆栈中所有元素处理完就可获得最终匹配结果,由此提高了XML数据的查询效率。