[发明专利]一种基于邻接表实现节点路径的查询方法及系统有效
申请号: | 201910308958.X | 申请日: | 2019-04-17 |
公开(公告)号: | CN110083603B | 公开(公告)日: | 2021-02-12 |
发明(设计)人: | 刘其帅 | 申请(专利权)人: | 武汉初心科技有限公司 |
主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/2455;G06F16/242 |
代理公司: | 武汉知产时代知识产权代理有限公司 42238 | 代理人: | 孙丽丽 |
地址: | 430000 湖北省武汉*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 邻接 实现 节点 路径 查询 方法 系统 | ||
本发明公开了一种基于邻接表实现节点路径的查询方法及系统,所述方法及系统采用邻接表的方式在数据库存储了整个树,通过查询数据库来得到若干节点的直接父节点;在树的深度较深时,在此邻接表的基础上增加一个路径缓存使得将之前的多次查询变成批量查询,减少查询直接父节点的次数有效的节省了存储空间。
技术领域
本发明涉及数据存储领域,更具体地说,涉及一种基于邻接表实现节点路径的查询方法及系统。
背景技术
树形结构是计算机信息系统的一种常用表示方法,可以很方便地展示实体之间的关系(例如:商品分类、文件系统、人员的组织架构)。树形结构的基本操作为增加节点、删除节点、移动子树、获取节点路径等。
目前比较经典和普遍的存储方式有以下几种,各自都有相应的缺陷:
1、邻接表(Adjacency List):保存父子相邻节点的关系;当获取一个节点的路径时,需要每一层查询一次父节点,当层级较多时,查询的次数会相应增多。
2、路径枚举(Path Enumerations):保存每个节点到根节点之间经过的节点枚举;当移动一个比较大的子树时,需要修改子树中每个节点的路径信息;当子树较大时,此操作会花费较多时间。
3、嵌套集(Nested Sets):每个节点使用nleft和nright来编码,其中nleft比所有后代都小,nright比所有后代都大。当插入和移动节点时,需要重新分配左右值,会花费较多时间。
4、闭包表(Closure Table):将树中所有节点间的关系都记录下来;此方法需要的存储空间较大,并且移动子树需要修改的行数较多。
上述几种数据存储方式中,在树的深度比较深的情况下,“移动子树”和“获取节点路径”这两种操作中只能有一种能够快速完成。
发明内容
本发明要解决的技术问题在于,针对现有技术数据查询效率较低的缺陷,通过在邻接表的基础上增加了一个路径缓存算法,实现节点路径的快速查询方法。
本发明解决其技术问题所采用的技术方案是:构造一种基于邻接表实现节点路径的查询方法,包括以下步骤:
S1、定义第一集合A1和第二集合A2;其中,所述第一集合A1中包括了若干个已查询节点,所述第二集合A2中包括了若干个待查询节点;
S2、查询缓存系统:在缓存系统中,查询所述第二集合A2中所有待查询节点的祖先节点;
S3、将步骤S2中查询到的祖先节点,与第一集合A1中所有的已查询节点进行匹配,将未匹配成功的祖先节点作为待查询节点存入第二集合A2中;
S4、在数据库中查询所有待查询节点的直接父节点,并将查询到对应直接父节点的待查询节点作为查询节点,存入到第一集合A1中;
S5、清空第二集合A2中的节点数据;
S6、将步骤S4中查询到的所有直接父节点,存入所述已清空的第二集合A2中;
S7、重复步骤S2至S6,直到第二集合A2为空时,执行步骤S8;
S8、利用第一集合A1中的节点数据进行节点路径查询。
进一步的,步骤S1中,将能够从数据库中查询到父节点的节点作为已查询节点,将未能从数据库中查询到父节点的节点作为待查询节点。
进一步的,在数据库中以邻接表的方式存储整个树的节点相邻关系;
进一步的,步骤S2采用的缓存系统,以键-值对的方式记录每个节点,以及与节点相对应的祖先节点;其中,将以节点作为键,以节点的祖先列表作为值,所述祖先列表中包括了与节点相对应的若干个祖先节点。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉初心科技有限公司,未经武汉初心科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910308958.X/2.html,转载请声明来源钻瓜专利网。