论文部分内容阅读
随着万维网的飞速发展,XML的应用范围不断扩大,支持XML的数据库成为众人瞩目的焦点。关系型数据库不能很好地支持XML。关系型数据库将XML转换成二维表的形式存储,但XML与二维表存储形式的转换存在性能问题。原生(Native)XML数据库是当前数据库领域的研究热点之一。XML文档在Native XML数据库中的存储和查询策略,是十分重要的问题。本文以一个开放源代码的Native XML数据库产品—Xindice为对象,深入分析了它的分层存储模型,研究了它的页面存储策略以及B树索引结构。在此基础上,并阐明了Xindice存储策略和查询策略存在的不足。针对这些不足,本文作了以下分析研究工作。在存储策略方面,当集合中加入了新的XML文档时,Xindice数据库分配“空闲”页面用于存储文档的数据,如果没有空闲页面,则创建新的页面;但是系统在删除XML文档时,仅仅将其占用的页面标记为“空闲”而并不释放其占用的空间。随着文档的插入和删除,页面文件占用的磁盘空间将会不断的增大。本文在实验的基础之上,分析了Xindice数据库存储策略在“空闲”页面管理上存在不足的原因,提出并实现了尾部页面截断策略和页面移动策略,释放了“空闲”页面占用的磁盘空间,提高了系统对磁盘资源的利用率。而针对页面移动策略页面移动次数过多,本文又提出了尾部页面移动策略,减少了释放“空闲”页面所需要的时间。在查询策略方面,Xindice数据库的查询语言是XPath,不支持XQuery查询语言。而XPath的查询功能有限,如不能分组、排序、连接等,不能对多个文档进行联合查询,影响了Xindice数据库查询上的灵活性。本文设计了XQuery表达式的文法,利用JavaCC工具和JJTree工具对XQuery表达式的文法生成词法语法分析器,用来识别输入的XQuery表达式的语法结构,并生成相应的语法树。根据此语法树,对构成该查询的XQuery表达式的各子句分别进行相应的查询处理,得到XML文档的最终查询结果,实现了XQuery查询,提高了Xindice数据库的查询上的灵活性。最后本文通过实例验证了本文设计的XQuery查询在Xindice数据库中的有效性。