CN110083603B - 一种基于邻接表实现节点路径的查询方法及系统 - Google Patents

一种基于邻接表实现节点路径的查询方法及系统 Download PDF

Info

Publication number
CN110083603B
CN110083603B CN201910308958.XA CN201910308958A CN110083603B CN 110083603 B CN110083603 B CN 110083603B CN 201910308958 A CN201910308958 A CN 201910308958A CN 110083603 B CN110083603 B CN 110083603B
Authority
CN
China
Prior art keywords
node
nodes
query
ancestor
queried
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910308958.XA
Other languages
English (en)
Other versions
CN110083603A (zh
Inventor
刘其帅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Chuxin Technology Co ltd
Original Assignee
Wuhan Chuxin Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Chuxin Technology Co ltd filed Critical Wuhan Chuxin Technology Co ltd
Priority to CN201910308958.XA priority Critical patent/CN110083603B/zh
Publication of CN110083603A publication Critical patent/CN110083603A/zh
Application granted granted Critical
Publication of CN110083603B publication Critical patent/CN110083603B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2246Trees, e.g. B+trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2425Iterative querying; Query formulation based on the results of a preceding query
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于邻接表实现节点路径的查询方法及系统,所述方法及系统采用邻接表的方式在数据库存储了整个树,通过查询数据库来得到若干节点的直接父节点;在树的深度较深时,在此邻接表的基础上增加一个路径缓存使得将之前的多次查询变成批量查询,减少查询直接父节点的次数有效的节省了存储空间。

Description

一种基于邻接表实现节点路径的查询方法及系统
技术领域
本发明涉及数据存储领域,更具体地说,涉及一种基于邻接表实现节点路径的查询方法及系统。
背景技术
树形结构是计算机信息系统的一种常用表示方法,可以很方便地展示实体之间的关系(例如:商品分类、文件系统、人员的组织架构)。树形结构的基本操作为增加节点、删除节点、移动子树、获取节点路径等。
目前比较经典和普遍的存储方式有以下几种,各自都有相应的缺陷:
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采用的缓存系统,以键-值对的方式记录每个节点,以及与节点相对应的祖先节点;其中,将以节点作为键,以节点的祖先列表作为值,所述祖先列表中包括了与节点相对应的若干个祖先节点。
进一步的,当第二集合A2为空时,即所述第二集合A2中的待查询节点均通过查询数据库找到其对应的直接父节点,此时根据第一集合A1中的查询节点和与其相对应的祖先节点,即可得到每个已查询节点的查询路径。
进一步的,当第二集合A2为空时,将第一集合A1中的每个查询节点作为键,所述每个查询节点的祖先列表作为值,写入到缓存系统中,使得在下次进行节点路径查询的时候,还能够利用之前写入的缓存数据,减少总体查询次数。
本发明提供的另外一种基于邻接表实现节点路径的查询系统,包括以下模块:
缓存模块,用于存储节点以及每个节点相对应的祖先节点;
数据库模块,用于以邻接表的方式存储整个树的节点相邻关系;
路劲查询模块,用于利用数据库模块和缓存模块中存储的节点数据,进行节点路径查询。
进一步的,所述查询系统利用如前述任意一项的节点路劲方法步骤,实现节点的路劲查询。
在本发明所述的一种基于邻接表实现节点路径的查询方法即系统中,在邻接表的基础上增加一个路径缓存,能够将之前的多次查询变成批量查询,减少查询直接父节点的次数,当层级较多时也能够快速查询路径。
本发明提出的技术方案不仅能够节省存储空间,还能够使移动子树和查询路径都有较好的性能;其中,移动子树的操作只需修改数据库中的邻接表而不需要更新缓存;查询路径操作中每个节点的父节点都是从数据库中查询,以此来保证路径查询的正确性;另一方面当缓存与数据库一致时,无论树有多深,由于缓存中已经有了每个节点的全部祖先节点,只需对数据库做一次批量查询来确认缓存一致,即可获得每个节点的路径。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是实现节点路径查询的方法流程图;
图2是整个树的结构图;
图3是树结构对应的领接表图;
图4是缓存系统中保存的部分节点的祖先节点列表图;
图5是实施过程图;
图6是最终需要查询的节点路径图;
图7是缓存系统更新图;
图8是节点路径查询系统的原理结构图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
请参考图1,其为实现节点路径查询的方法流程图,作为一个示例,请参考图2和图3,其分别为数据库中存储的整个树的结构图,以及与其对应的邻接表图。从图2中可知,本实施例中,在数据库中存储了8个节点,分别为节点1001-节点1008,通过图3中提供的与树结构所对应的邻接表可知,当前树结构中的子节点,以及与子节点所对应的父节点。
本发明提供的一种基于邻接表实现节点路劲查询的方法,具体包括以下步骤:
S1、定义第一集合A1和第二集合A2;其中,所述第一集合A1中包括了若干个已查询节点,所述第二集合A2中包括了若干个待查询节点;其中,将能够从数据库中查询到父节点的节点作为已查询节点,将未能从数据库中查询到父节点的节点作为待查询节点。作为一个示例,以节点1001作为要查询路径的节点,将节点1001放入第二集合A2中。
S2、查询缓存系统:在缓存系统中,查询集合A2中节点1001的祖先节点,其中,本实施例采用的缓存系统,以键-值对的方式记录每个节点,以及与节点相对应的祖先节点;其中,将以节点作为键,以节点的祖先列表作为值,所述祖先列表中包括了与节点相对应的若干个祖先节点;
请参考图4,其为缓存系统中保存的部分节点的祖先节点列表图,其中从图中可直观的得出每个节点对应的祖先节点,且允许部分缓存项与实际情况不一致。
S3、将步骤S2中查询到的祖先节点,与第一集合A1中所有的已查询节点进行匹配,将未匹配成功的祖先节点作为待查询节点存入第二集合A2中。
S4、在数据库中查询所有待查询节点的直接父节点,并将查询到直接父节点的待查询节点作为查询节点,存入到第一集合A1中。
S5、清空第二集合A2中的节点数据;
S6、将步骤S4中查询到的若干个直接父节点,存入所述已清空的第二集合A2中;
S7、重复步骤S2至S6,直到第二集合A2为空时,执行步骤S8;请参考图5,其为实施过程图,在本示例中,经过两次循环后,第二集合A2为空,即所述第二集合A2中的待查询节点均通过查询数据库找到其对应的直接父节点。
S8、利用第一集合A1中的节点数据进行节点路径查询,此时根据第一集合A1中的查询节点和与其相对应的祖先节点,即可得到每个节点的查询路径。请参考图6,其为最终需要查询的节点路径图,即本实施例中从根节点1001到其对应祖先节点1007的查询路径,图中可见在依次经过节点1002、节点1003节点1005后,最终查询到祖先节点1007。
本实施例中,为了提高算法的查询效率,在执行步骤S8时,将第一集合A1中的每个查询节点作为键,所述每个查询节点的祖先列表作为值,写入到缓存系统中;这样就保证了在下次运行时,还能够利用上次执行算法式写入的缓存数据,使得在查询数据库时能够一次查询多个待查询节点的直接父节点,减少总体查询次数。在本示例中,利用图4所示的不完全正确的缓存作为提示,只对数据库进行了两次查询就完成了深度为5的路径查询,结束后将正确的祖先节点写入缓存系统中,具体请参见图6所示的缓存系统更新图。
请参考图8,其为节点路径查询系统的原理结构图,本发明提供的一种基于邻接表实现节点路径的查询系统,包括缓存模块L1、数据库模块L2以及路劲查询模块L3,其中:
缓存模块L1用于存储节点以及每个节点相对应的祖先节点;
数据库模块L2用于以邻接表的方式存储整个树的节点相邻关系;
路劲查询模块L3用于利用数据库模块和缓存模块中存储的节点数据,进行节点路径查询。
所述节点路径查询系统,利用如前述任一项路径查询方法进行节点路径查询。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。

Claims (7)

1.一种基于邻接表实现节点路径的查询方法,其特征在于,包括以下步骤:
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中的节点数据进行节点路径查询。
2.根据权利要求1所述的查询方法,其特征在于,步骤S1中,将能够从数据库中查询到父节点的节点作为已查询节点,将未能从数据库中查询到父节点的节点作为待查询节点。
3.根据权利要求2所述的查询方法,其特征在于,在数据库中以邻接表的方式存储整个树的节点相邻关系。
4.根据权利要求1所述的查询方法,其特征在于,步骤S2采用的缓存系统,以键-值对的方式记录每个节点,以及与节点相对应的祖先节点;其中,将以节点作为键,以节点的祖先列表作为值,所述祖先列表中包括了与节点相对应的若干个祖先节点。
5.根据权利要求1所述的查询方法,其特征在于,当第二集合A2为空时,即所述第二集合A2中的待查询节点均通过查询数据库找到其对应的直接父节点,此时根据第一集合A1中的查询节点和与其相对应的祖先节点,即可得到每个已查询节点的查询路径。
6.根据权利要求1所述的查询方法,其特征在于,当第二集合A2为空时,将第一集合A1中的每个查询节点作为键,所述每个查询节点的祖先列表作为值,写入到缓存系统中,使得在下次进行节点路径查询的时候,还能够利用之前写入的缓存数据,减少总体查询次数。
7.一种基于邻接表实现节点路径的查询系统,其特征在于,包括以下模块:
缓存模块,用于存储节点以及每个节点相对应的祖先节点;
数据库模块,用于以邻接表的方式存储整个树的节点相邻关系;
路劲查询模块,用于利用数据库模块和缓存模块中存储的节点数据,进行节点路径查询;
所述查询系统利用如权利要求1-6中任意一项的节点路劲方法步骤,实现节点的路劲查询。
CN201910308958.XA 2019-04-17 2019-04-17 一种基于邻接表实现节点路径的查询方法及系统 Active CN110083603B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910308958.XA CN110083603B (zh) 2019-04-17 2019-04-17 一种基于邻接表实现节点路径的查询方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910308958.XA CN110083603B (zh) 2019-04-17 2019-04-17 一种基于邻接表实现节点路径的查询方法及系统

Publications (2)

Publication Number Publication Date
CN110083603A CN110083603A (zh) 2019-08-02
CN110083603B true CN110083603B (zh) 2021-02-12

Family

ID=67415290

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910308958.XA Active CN110083603B (zh) 2019-04-17 2019-04-17 一种基于邻接表实现节点路径的查询方法及系统

Country Status (1)

Country Link
CN (1) CN110083603B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114048197B (zh) * 2022-01-13 2022-04-19 浙江大华技术股份有限公司 树形结构数据处理方法、电子设备及计算机可读存储装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102075974B (zh) * 2011-01-10 2013-12-18 张俊虎 无线传感器网络高邻接度资源搜索方法
CN102880739A (zh) * 2012-07-31 2013-01-16 中国兵器科学研究院 一种基于邻接表的网络最小路集确定方法
CN103399902B (zh) * 2013-07-23 2016-05-25 东北大学 一种并行环境下的有向图可达性链表生成及查询方法
US10169487B2 (en) * 2016-04-04 2019-01-01 International Business Machines Corporation Graph data representation and pre-processing for efficient parallel search tree traversal
CN107679049A (zh) * 2016-08-02 2018-02-09 北京京东尚科信息技术有限公司 获取树形结构数据两节点间路径的方法、装置及系统

Also Published As

Publication number Publication date
CN110083603A (zh) 2019-08-02

Similar Documents

Publication Publication Date Title
US10394785B2 (en) Method and/or system for transforming between trees and arrays
KR101467589B1 (ko) 데이터 구조를 가지는 하나 이상의 장치 판독가능 매체, 및장치 실행가능 명령어를 구비한 하나 이상의 장치 판독가능 매체
US9870382B2 (en) Data encoding and corresponding data structure
CN102722566B (zh) 社交网络中潜在好友查询方法
CN107330094B (zh) 动态存储键值对的布鲁姆过滤器树结构及键值对存储方法
CN105677683A (zh) 批量数据查询方法和装置
CN111625534A (zh) 用于哈希运算的数据结构及基于该结构的哈希表存储、查询方法
CN107679049A (zh) 获取树形结构数据两节点间路径的方法、装置及系统
US7769781B1 (en) Method for labeling data stored in sequential data structures with parameters which describe position in a hierarchy
WO2015010508A1 (zh) 一种基于一维线性空间实现Trie树的词典存储管理方法
CN111666468A (zh) 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法
CN103699647A (zh) 一种字符串词典的索引方法及系统
CN110263104A (zh) Json字符串处理方法及装置
EP3955256A1 (en) Non-redundant gene clustering method and system, and electronic device
CN116521956A (zh) 一种图数据库查询方法、装置、电子设备及存储介质
CN110083603B (zh) 一种基于邻接表实现节点路径的查询方法及系统
CN113704248B (zh) 一种基于外置索引的区块链查询优化方法
CN114706848A (zh) 区块链数据存储、更新、读取方法及装置、电子设备
CN109254962A (zh) 一种基于t-树的索引优化方法及装置
CN107515867B (zh) 一种NoSQL数据库的数据存储、查询方法和装置以及一种rowKey全组合的生成方法和装置
US11481370B1 (en) Devices, systems, and methods for optimization of data sets
CN111159175B (zh) 基于索引的非完整数据库Skyline查询方法
CN102722546A (zh) 关系数据库环境下图中最短路径的查询方法
CN109460394B (zh) 一种多级文档条目追踪矩阵的简化方法
CN112269784A (zh) 一种基于硬件实现的哈希表结构以及插入、查询和删除方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 430000, B0701, Comprehensive Building, Wuhan Zhongdi Science and Technology Park, No. 598 Guanshan Avenue, Donghu New Technology Development Zone, Wuhan City, Hubei Province (Wuhan Area of Free Trade Zone)

Patentee after: Wuhan Chuxin Technology Co.,Ltd.

Country or region after: China

Address before: 430000 Huazhong Shuguang Software Park, No.1 Guanshan 1st Road, Donghu Development Zone, Wuhan City, Hubei Province

Patentee before: Wuhan Chuxin Technology Co.,Ltd.

Country or region before: China