发明内容
本发明的目的在于提供一种创建动态索引的方法及装置,用户能够根据自己是需求为需要建立索引的节点路径建立索引,既满足了用户的查询要求,还节省了数据库的存储空间。
为了达到上述目的,本发明实施例提供一种创建动态索引的方法,包括:
获取可扩展标识语言XML文档中需要建立索引的元素节点;
为需要建立索引的所述元素节点设置标识,并将具有所述标识的元素节点保存至所述XML文档的节点存储表中;
从所述XML文档的节点路径表中获取具有所述标识的元素节点的节点路径,在所述节点路径上创建索引,并将所述索引保存至节点路径索引元数据表中。
其中,所述XML文档的节点存储表包含:一个文档节点及多个元素节点,其中,所述文档节点用于存储所述XML文档的元数据和根元素节点ID,所述元素节点用于存储本元素节点的属性节点、名字空间节点、文本子节点、处理指令子节点、注释子节点以及本元素节点与其他元素节点的关系。
其中,所述方法还包括:
响应用户的删除预设文档中预设节点路径的索引的操作;
根据所述预设文档的ID和预设节点路径的ID,从所述节点路径索引元数据表中查询所述预设节点路径上是否存在索引;
若存在索引,则从所述节点路径索引元数据表中删除所述节点路径的索引。
其中,所述方法还包括:
响应用户在所述节点存储表中插入一元素节点的操作;
若用户需要为所述元素节点建立索引,则为所述元素节点设置所述标识并根据所述标识为所述元素节点的节点路径创建索引。
其中,所述方法还包括:
响应用户修改所述节点存储表中一元素节点的文本节点的值的操作;
根据所述元素节点的ID从所述节点路径索引元数据表中查询所述元素节点的节点路径上是否存在索引;
若存在索引,则根据所述修改对应修改所述节点路径索引元数据表中的节点路径索引。
其中,所述方法还包括:
响应用户删除一元素节点的操作;
根据所述元素节点的ID从所述节点路径索引元数据表查询该元素节点的节点路径上是否存在索引;
如果存在索引,则从所述节点存储表中删除该元素节点的同时从所述节点路径索引元数据表中删除所述索引。
其中,删除所述元素节点后,所述方法还包括:
从所述节点路径表中查询是否存在与该元素节点的节点路径相同的其他元素节点;
若不存在与该元素节点的节点路径相同的其他元素节点,从所述节点路径索引元数据表中删除该节点路径的其他数据。
本发明实施例还提供一种创建动态索引的装置,包括:
获取模块,用于获取可扩展标识语言XML文档中需要建立索引的元素节点;
设置模块,用于为需要建立索引的所述元素节点设置标识,并将具有所述标识的元素节点保存至所述XML文档的节点存储表中;
第一创建模块,用于从所述XML文档的节点路径表中获取具有所述标识的元素节点的节点路径,在所述节点路径上创建索引,并将所述索引保存至节点路径索引元数据表中。
其中,所述XML文档的节点存储表包含:一个文档节点及多个元素节点,其中,所述文档节点用于存储所述XML文档的元数据和根元素节点ID,所述元素节点用于存储本元素节点的属性节点、名字空间节点、文本子节点、处理指令子节点、注释子节点以及本元素节点与其他元素节点的关系。
其中,所述装置还包括:
第一删除模块,用于响应用户的删除预设文档中预设节点路径的索引的操作;
第一查询模块,用于根据所述预设文档的ID和预设节点路径的ID,从所述节点路径索引元数据表中查询所述预设节点路径上是否存在索引;
第二删除模块,用于若存在索引,则从所述节点路径索引元数据表中删除所述节点路径的索引。
其中,所述装置还包括:
插入模块,用于响应用户在所述节点存储表中插入一元素节点的操作;
第二创建模块,用于若用户需要为所述元素节点建立索引,则为所述元素节点设置所述标识并根据所述标识为所述元素节点的节点路径创建索引。
其中,所述装置还包括:
第一修改模块,用于响应用户修改所述节点存储表中一元素节点的文本节点的值的操作;
第二查询模块,用于根据所述元素节点的ID从所述节点路径索引元数据表中查询所述元素节点的节点路径上是否存在索引;
第二修改模块,用于若存在索引,则根据所述修改对应修改所述节点路径索引元数据表中的节点路径索引。
其中,所述装置还包括:
第三删除模块,用于响应用户删除一元素节点的操作;
第三查询模块,用于根据所述元素节点的ID从所述节点路径索引元数据表查询该元素节点的节点路径上是否存在索引;
第四删除模块,用于如果存在索引,则从所述节点存储表中删除该元素节点的同时从所述节点路径索引元数据表中删除所述索引。
其中,所述装置还包括:
第四查询模块,用于从所述节点路径表中查询是否存在与该元素节点的节点路径相同的其他元素节点;
第五删除模块,用于若不存在与该元素节点的节点路径相同的其他元素节点,从所述节点路径索引元数据表中删除该节点路径的其他数据。
本发明的上述技术方案至少具有如下有益效果:
本发明实施例的创建动态索引的方法及装置中,根据用户意愿为需要建立索引的元素节点对应的节点路径创建索引,同时对应的在节点路径索引元数据表中保存其索引;用户能够灵活的创建、删除及管理索引,在满足用户查询需求的基础上,节省了数据库的存储空间,提高数据库的查询效率。
具体实施方式
为使本发明要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明针对现有技术中对所有元素节点的节点路径均建立索引,而用户并不需要查询所有的节点,严重浪费了数据库的存储空间的问题,提供一种创建动态索引的方法及装置,根据用户意愿为需要建立索引的元素节点对应的节点路径创建索引,同时对应的在节点路径索引元数据表中保存其索引;用户能够灵活的创建、删除及管理索引,在满足用户查询需求的基础上,节省了数据库的存储空间,提高数据库的查询效率。
如图1所示,本发明实施例提供一种创建动态索引的方法,包括:
步骤11,获取可扩展标识语言XML文档中需要建立索引的元素节点;
步骤12,为需要建立索引的所述元素节点设置标识,并将具有所述标识的元素节点保存至所述XML文档的节点存储表中;
步骤13,从所述XML文档的节点路径表中获取具有所述标识的元素节点的节点路径,在所述节点路径上创建索引,并将所述索引保存至节点路径索引元数据表中。
本发明的上述实施例中,XML文档的每一个元素节点都有一条路径,且这些所有的元素节点的所有路径均存放在所述节点路径表中;具体的,该节点路径表中以节点路径编号(pathID)为键值,指向节点路径表中对应的元素节点的具体路径。而所有的元素节点都存储在所述节点存储表中,该节点存储表中具体存储节点的标识(nodeID)、该节点对应的节点路径的pathID、该节点所在的文档的docID等值。
例如在节点存储表中,在docID,pathID和文本节点三列组合建立一个索引,就是在节点的路径上建立了节点的路径索引;用户在通过xquery语句查询的时候,只需要输入某个xml文档下的某条路径下,文本节点是什么作为查询条件,就能通过该节点表上的路径索引查到用户想要的数据。
比如,数据库中存储为<a>
<b>
<c>C1</c>
<c>C2</c>
</b>
</a>
路径/a/b/c下有两个元素节点C1,C2,他们的路径都是/a/b/c。
当查询语句为for$iindoc(“test/test.xml”)/a/b/cwhere$i/text()=”C1”return$i
通过路径索引查询结果就是<c>C1</c>。
本发明的具体实施例中,XML数据库管理系统中存储XML文档的实体称为容器,每个容器中存储有一张所述节点路径索引元数据表,该节点路径索引元数据表用来管理和维护用户根据自身意愿动态创建的自定义的节点路径,且这些节点路径是需要在节点存储表上建立索引的。具体的,该节点路径索引元数据表中存储了路径索引的名字,节点路径的pathID,节点路径所在文档的docID,文档容器的ID以及节点的路径等字段信息。
具体的,本发明上述实施例中,所述XML文档的节点存储表包含:一个文档节点及多个元素节点,其中,所述文档节点用于存储所述XML文档的元数据和根元素节点ID,所述元素节点用于存储本元素节点的属性节点、名字空间节点、文本子节点、处理指令子节点、注释子节点以及本元素节点与其他元素节点的关系。
具体的,当用户需要新增一个XML文档到XML数据库管理系统中时,按照通常的方式存储XML文档的文档节点和元素节点数据。在添加XML文档命令后面指定一个参数,并由用户指定需要在该文档的哪些节点路径上建立索引。当缺省值(系统默认状态)是不在添加的文档的节点路径上建立索引时,如果用户指定了需要建立索引的参数并给出了需要添加节点路径的索引的路径值,则XML数据库管理系统在解析文档的时候,每解析出一个元素节点,然后把解析出的元素节点插入到节点存储表中的时候,这时给一个标识告诉存储引擎是否要在这个元素节点上建立路径索引。同时,在节点路径索引元数据表添加相应的记录。
例如:XML文档的原始存储方式如下:
当需要添加一个路径索引时,
addDoctestbooks.xmlon/bookstore/book/name–fD:\books.xmlwithair
其中,test是容器名字;
books.xml是添加的xml文档名字;
/bookstore/book/name是需要建立节点路径索引的路径;
air是这个路径索引的索引名字。
当用户以缺省值添加文档的时候,就是说用户没有在添加的文档中建立对应的节点的路径索引。然后,用户在以后的查询中,有需要在已经添加的文档中建立路径索引的需求,对于这种情况,我们依然可以动态的添加指定的节点路径上的索引,通过扫节点存储表中的每一个元素节点,找到需要建立节点路径索引的元素节点。然后,建立其对应的节点路径索引。同样的,需要在节点路径索引元数据表上添加相应的记录。
创建一个节点路径索引的过程如下:
createIndexOntestbooks.xmlon/bookstore/book/authorwithidx
其中,test是容器名字;
books.xml是添加的xml文档名字;
/bookstore/book/author是需要建立节点路径索引的路径;
idx是这个路径索引的索引名字。
进一步的,本发明的上述实施例中,如图2所示,所述方法还包括:
步骤21,响应用户的删除预设文档中预设节点路径的索引的操作;
步骤22,根据所述预设文档的ID和预设节点路径的ID,从所述节点路径索引元数据表中查询所述预设节点路径上是否存在索引;
步骤23,若存在索引,则从所述节点路径索引元数据表中删除所述节点路径的索引。
本发明的具体实施例中,删除文档的节点路径的索引时,用户指定了删除哪个文档,哪条路径上的节点索引。XML数据库管理系统首先会根据用户给定的文档ID和节点的路径来查询节点路径索引表。查看是该文档的用户指定的路径上是否有节点路径索引。如果没有,则会给用户一个反馈;如果有,则直接删除其对应的索引。同时,节点路径索引元数据表也要做相应的删除操作。
进一步的,本发明的上述实施例中,如图3所示,所述方法还包括:
步骤31,响应用户在所述节点存储表中插入一元素节点的操作;
步骤32,若用户需要为所述元素节点建立索引,则为所述元素节点设置所述标识并根据所述标识为所述元素节点的节点路径创建索引。
本发明的具体实施例中,在节点存储表中插入一个节点,首先去节点路径索引元数据表去检查该节点是否需要建立路径索引。如果需要建立,给存储引擎一个标志位,告诉它这个节点需要建立路径索引。
进一步的,本发明的上述实施例中,如图4所示,所述方法还包括:
步骤41,响应用户修改所述节点存储表中一元素节点的文本节点的值的操作;
步骤42,根据所述元素节点的ID从所述节点路径索引元数据表中查询所述元素节点的节点路径上是否存在索引;
步骤43,若存在索引,则根据所述修改对应修改所述节点路径索引元数据表中的节点路径索引。
本发明的具体实施例中,修改一个元素节点的文本节点的值,首先也是要检查该元素节点上是否有节点路径索引。如果有,则它对应的路径索引也要修改。
进一步的,本发明的上述实施例中,如图5所示,所述方法还包括:
步骤51,响应用户删除一元素节点的操作;
步骤52,根据所述元素节点的ID从所述节点路径索引元数据表查询该元素节点的节点路径上是否存在索引;
步骤53,如果存在索引,则从所述节点存储表中删除该元素节点的同时从所述节点路径索引元数据表中删除所述索引。
较佳的,删除所述元素节点后,所述方法还包括:
步骤54,从所述节点路径表中查询是否存在与该元素节点的节点路径相同的其他元素节点;
步骤55,若不存在与该元素节点的节点路径相同的其他元素节点,从所述节点路径索引元数据表中删除该节点路径的其他数据。
本发明的具体实施例中,删除一个元素节点,首先要通过路径索引元数据表检查该元素节点是否有路径索引。如果有,则删除该节点的时候,它对应的路径索引也要删掉。需要注意的是,如果删除这个元素节点后,在该文档中再也没有与这个元素节点拥有相同路径的元素节点了,则这时需要把路径索引的元数据表中的这个路径索引的元数据删掉。
本发明的上述实施例在XML数据库管理系统中动态的创建节点路径上的索引,比以前的做法更有效的节省了XML-DBMS的存储空间,并且更灵活有效地满足了用户的需求。动态的创建节点路径上的索引,使XML数据库管理系统更灵活,用户可以根据自身的需求,做出是否要创建索引的操作,使用起来更灵活方便,而且还不会造成XMLDBMS系统空间的浪费;同时本发明在现有的节点数据存储方案上,经过灵活有效的改进,以很小的代价在节点路径上添加了可动态创建节点路径索引的功能,保证了系统开发的可实施性。
为了更好的实现上述目的,如图6所示,本发明实施例还提供一种创建动态索引的装置,包括:
获取模块61,用于获取可扩展标识语言XML文档中需要建立索引的元素节点;
设置模块62,用于为需要建立索引的所述元素节点设置标识,并将具有所述标识的元素节点保存至所述XML文档的节点存储表中;
第一创建模块63,用于从所述XML文档的节点路径表中获取具有所述标识的元素节点的节点路径,在所述节点路径上创建索引,并将所述索引保存至节点路径索引元数据表中。
具体的,本发明的上述实施例中,所述XML文档的节点存储表包含:一个文档节点及多个元素节点,其中,所述文档节点用于存储所述XML文档的元数据和根元素节点ID,所述元素节点用于存储本元素节点的属性节点、名字空间节点、文本子节点、处理指令子节点、注释子节点以及本元素节点与其他元素节点的关系。
具体的,本发明的上述实施例中,所述装置还包括:
第一删除模块,用于响应用户的删除预设文档中预设节点路径的索引的操作;
第一查询模块,用于根据所述预设文档的ID和预设节点路径的ID,从所述节点路径索引元数据表中查询所述预设节点路径上是否存在索引;
第二删除模块,用于若存在索引,则从所述节点路径索引元数据表中删除所述节点路径的索引。
具体的,本发明的上述实施例中,所述装置还包括:
插入模块,用于响应用户在所述节点存储表中插入一元素节点的操作;
第二创建模块,用于若用户需要为所述元素节点建立索引,则为所述元素节点设置所述标识并根据所述标识为所述元素节点的节点路径创建索引。
具体的,本发明的上述实施例中,所述装置还包括:
第一修改模块,用于响应用户修改所述节点存储表中一元素节点的文本节点的值的操作;
第二查询模块,用于根据所述元素节点的ID从所述节点路径索引元数据表中查询所述元素节点的节点路径上是否存在索引;
第二修改模块,用于若存在索引,则根据所述修改对应修改所述节点路径索引元数据表中的节点路径索引。
具体的,本发明的上述实施例中,所述装置还包括:
第三删除模块,用于响应用户删除一元素节点的操作;
第三查询模块,用于根据所述元素节点的ID从所述节点路径索引元数据表查询该元素节点的节点路径上是否存在索引;
第四删除模块,用于如果存在索引,则从所述节点存储表中删除该元素节点的同时从所述节点路径索引元数据表中删除所述索引。
具体的,本发明的上述实施例中,所述装置还包括:
第四查询模块,用于从所述节点路径表中查询是否存在与该元素节点的节点路径相同的其他元素节点;
第五删除模块,用于若不存在与该元素节点的节点路径相同的其他元素节点,从所述节点路径索引元数据表中删除该节点路径的其他数据。
本发明上述实施例为了节省XML数据库管理系统的存储空间,同时又能满足用户的查询需求,提供一种创建动态索引的方法,使得用户可以对自定义的路径创建索引;可以对节点路径上的索引进行创建,删除,重建等操作;节省数据库的存储空间,提高查询效率。
需要说明的是,本发明实施例提供的创建动态索引的装置是应用上述创建动态索引的方法的装置,则上述方法的所有实施例均适用于该装置,且均能达到相同或相似的有益效果。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。