CN106897408A - 一种实现快速查询树形结构数据指定节点下级的方法 - Google Patents
一种实现快速查询树形结构数据指定节点下级的方法 Download PDFInfo
- Publication number
- CN106897408A CN106897408A CN201710084547.8A CN201710084547A CN106897408A CN 106897408 A CN106897408 A CN 106897408A CN 201710084547 A CN201710084547 A CN 201710084547A CN 106897408 A CN106897408 A CN 106897408A
- Authority
- CN
- China
- Prior art keywords
- node
- subordinate
- tree structure
- structure data
- sequence number
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种实现快速查询树形结构数据指定节点下级的方法,包括如下步骤:S1.将树形结构数据以深度优先遍历法中的先序遍历顺序存储到关系型数据库表中;S2.输入指定节点ID,判断要查询的该指定节点ID的所有下级节点ID,步骤如下:S21.设定要查询的节点ID对应序列号为N,对应深度等级为L;S22. 设定要查询的所有下级节点ID对应序列号范围N1‑N2,沿着序列号N升序的方向查询深度等级,设定为L′;当L′≤L时,查询停止,L′对应的序列号设定为N′,N<N1,N2< N′;L′始终大于L,则最后的序列号为N′,N<N1,N2≤ N′;N1和N2之间序列号对应的所有节点ID为要查询的节点ID。
Description
技术领域
本发明属于数据处理技术领域,具体涉及一种实现快速查询树形结构数据指定节点下级的方法。
背景技术
业务系统中,经常会遇到树状结构数据,如组织机构树、产品分类等,这种树形结构数据在数据表中存储时,通常会将每个节点作为一条记录存储,每条记录通常包括节点ID、节点名称、上级节点ID等字段,需要查询某个节点的所有下级节点时,通常会采用递归查询的方式,然而当节点数较多,树层级较深时,递归查询性能会非常的差;采用构建、存储每个节点的所有上级节点ID全路径的方式,虽能够快速查询出指定节点的所有下级节点解决递归查询性能差的问题,但要依赖高级程序来维护路径中的字符串,并且验证字符串的正确性的开销很大,字符串的长度很难确定,无论字符串的长度设为多大,都存在不能够无限扩展的情况。
发明内容
本发明的目的在于,针对上述递归查询性能差,存储路径方式需要高级程序维护字符串及字符串长度难确定的缺陷,提供一种实现快速查询树形结构数据指定节点下级的方法,以解决上述技术问题。
为实现上述目的,本发明给出以下技术方案:
一种实现快速查询树形结构数据指定节点下级的方法, 包括如下步骤:
S1.将树形结构数据以深度优先遍历法中的先序遍历顺序存储到一张关系型数据库表中,数据库表字段包括序列号、节点ID和深度等级,节点ID是主键,每个节点ID取不同的值;
S2.输入指定节点ID,判断出要查询的该指定节点ID的所有下级节点ID,步骤如下:
S21.设定要查询的指定节点ID对应的序列号为N,对应的深度等级为L;
S22.设定要查询的所有下级节点ID对应的序列号范围为N1-N2,沿着序列号N升序的方向在数据库表中查询深度等级,设定为L′;
当L′≤L时,查询停止,L′对应的序列号设定为N′,N<N1,N2< N′;
若查询到结束,L′始终大于L,则数据库表最后一行的序列号设定为N′,N<N1,N2≤ N′;
N1和N2之间的所有序列号对应的节点ID为要查询的节点ID。
进一步地,步骤S1所述的深度优先遍历法是沿着树的深度遍历树的节点,尽可能深的搜索树的分支,每个节点只访问一次;先序遍历顺序是对任一子树,先访问根,其次遍历其左子树,最后遍历其右子树。
进一步地,步骤S1中的关系型数据库表中还包括节点名称、上级节点ID。
进一步地,步骤S1中节点ID值长度相等。
进一步地,增加节点时,在数据库表格中增加对应的行,从增加的节点往下的所有节点对应序列号+1, 增加的节点有下级子节点时, 同时所有子节点的深度等级+1;删除节点时,在数据库表格中删除对应的行,从删除的节点往下的所有节点对应序列号-1,删除的节点有下级子节点时, 同时所有子节点的深度等级-1。
进一步地,变更节点上下级关系时,在数据库表格中按先删除后增加的方式变更序列号和深度等级。
进一步地,步骤S2中指定节点的所有下级节点的查询采用SQL语句。
本发明的有益效果在于:本发明是树形结构数据快速查询某个节点的所有下级节点的一种解决方案,是传统递归查询和路径存储方式的一种有效替代方案,尤其在树节点数较多,层级较深时,优势更加明显,而且解决路径存储方式需要高级程序维护字符串及字符串长度难确定的缺陷,能很好的应用于组织机构树、产品分类树等实际业务场景中。
此外,本发明设计原理可靠,结构简单,具有非常广泛的应用前景。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
图1为实施例1树形结构图;
图2为实施例1树形结构存储到关系型数据库表格中的图;
图3为实施例2增加节点时的树形结构图;
图4为实施例2增加节点时的关系型数据库表格的变化示意图;
图5为实施例3变更节点关系时的树形结构图;
图6为实施例3变更节点关系时的关系型数据库表格的变化示意图。
具体实施方式:
为使得本发明的目的、特征、优点能够更加的明显和易懂,下面将结合本发明具体实施例中的附图,对本发明中的技术方案进行清楚、完整地描述。
本发明提供一种实现快速查询树形结构数据指定节点下级的方法,实施例1如图1和图2所示,包括如下步骤:
S1.将图1所示的树形结构数据以深度优先遍历法中的先序遍历顺序存储到图2所示关系型数据库表中,数据表字段包括序列号、节点ID和深度等级,节点ID是主键,每个节点ID取不同的值; 深度优先遍历法中的先序遍历顺序为从根节点root依次到节点n0001,n0003,n0004,n0002,n0005,n0006;
如要查询n0001的所有下级节点,查询可采用SQL语句,
S2.要查询节点n0001的所有下级节点, 判断出节点n0001的所有下级节点ID, 步骤如下:
S21.查到n0001对应的序列号N为2, 对应的深度等级L为2;
S22.设定要查询的所有下级节点ID对应的序列号范围为N1-N2,沿着序列号2升序的方向在数据库表中查询深度等级,设定为L′;
当L′=2时,查询停止,L′对应的序列号N′=5,2<N1,N2< 5;
2和5之间的所有序列号对节点ID为要查询的节点ID,即序列号3对应的n0003和序列号4对应的n0004为要查询的节点ID。
若要查询n0002的所有下级节点,查询可采用SQL语句,
S2.要查询节点n0002的所有下级节点, 判断出节点n0002的所有下级节点ID, 步骤如下:
S21.查到n0002对应的序列号N为5, 对应的深度等级L为2;
S22.设定要查询的所有下级节点ID对应的序列号范围为N1-N2,沿着序列号5升序的方向在数据库表中查询深度等级,设定为L′;
查询到结束,L′始终大于2,则数据库表最后一行的序列号7设定为N′,5<N1,N2≤ 7;
5和7之间的所有序列号对节点ID为要查询的节点ID,即序列号6对应的n0005和序列号7对应的n0006为要查询的节点ID。
实施例2如图3和图4所示,增加节点n0008,n0008增加的位置在节点n0003和n004之间,在数据库表格中增加对应的行,从增加节点n0008往下的所有节点对应序列号+1。
实施例3如图5和图6所示,变更节点上下级关系时,按先删除后增加的方式变更序列号和深度等级,将n0001的下级节点n0004变更成n0001的上级节点,如图5所示,在数据库表格中按先删除n0001的子节点n0004,再增加n0001的上级节点n0004的方式变更序列号和深度等级,具体如图6所示:
删除节点n0004,n0004删除的位置在节点n0003之后,在数据库表格中删除对应的行,从删除的节点n0004往下的所有节点对应序列号-1;
再增加节点n0004,n0004增加的位置在根节点root和n0001之间,在数据库表格中增加对应的行,从增加的节点n0004往下的所有节点对应序列号+1,增加的节点n0004有下级子节点n0001,n0003, 同时n0001,n0003的深度等级+1。
本发明的实施例是说明性的,而非限定性的,上述实施例只是帮助理解本发明,因此本发明不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他的具体实施方式,同样属于本发明保护的范围。
Claims (7)
1.一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,包括如下步骤:
S1.将树形结构数据以深度优先遍历法中的先序遍历顺序存储到一张关系型数据库表中,数据库表字段包括序列号、节点ID和深度等级,节点ID是主键,每个节点ID取不同的值;
S2.输入指定节点ID,判断出要查询的该指定节点ID的所有下级节点ID,步骤如下:
S21.设定要查询的指定节点ID对应的序列号为N,对应的深度等级为L;
S22.设定要查询的所有下级节点ID对应的序列号范围为N1-N2,沿着序列号N升序的方向在数据库表中查询深度等级,设定为L′;
当L′≤L时,查询停止,L′对应的序列号设定为N′,N<N1,N2< N′;
若查询到结束,L′始终大于L,则数据库表最后一行的序列号设定为N′,N<N1,N2≤ N′;
N1和N2之间的所有序列号对应的节点ID为要查询的节点ID。
2.如权利要求1所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,步骤S1所述的深度优先遍历法是沿着树的深度遍历树的节点,尽可能深的搜索树的分支,每个节点只访问一次;先序遍历顺序是对任一子树,先访问根,其次遍历其左子树,最后遍历其右子树。
3.如权利要求1所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,步骤S1中的关系型数据库表中还包括节点名称、上级节点ID。
4.如权利要求1所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,步骤S1中节点ID值长度相等。
5.如权利要求1所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,增加节点时,在数据库表格中增加对应的行,从增加的节点往下的所有节点对应序列号+1, 增加的节点有下级子节点时, 同时所有子节点的深度等级+1;删除节点时,在数据库表格中删除对应的行,从删除的节点往下的所有节点对应序列号-1,删除的节点有下级子节点时, 同时所有子节点的深度等级-1。
6.如权利要求5所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,变更节点上下级关系时,在数据库表格中按先删除后增加的方式变更序列号和深度等级。
7.如权利要求1所述的一种实现快速查询树形结构数据指定节点下级的方法,其特征在于,步骤S2中指定节点的所有下级节点的查询采用SQL语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710084547.8A CN106897408A (zh) | 2017-02-16 | 2017-02-16 | 一种实现快速查询树形结构数据指定节点下级的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710084547.8A CN106897408A (zh) | 2017-02-16 | 2017-02-16 | 一种实现快速查询树形结构数据指定节点下级的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106897408A true CN106897408A (zh) | 2017-06-27 |
Family
ID=59184114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710084547.8A Pending CN106897408A (zh) | 2017-02-16 | 2017-02-16 | 一种实现快速查询树形结构数据指定节点下级的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106897408A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109062936A (zh) * | 2018-06-15 | 2018-12-21 | 中国平安人寿保险股份有限公司 | 一种数据查询方法、计算机可读存储介质及终端设备 |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN110309144A (zh) * | 2018-03-22 | 2019-10-08 | 北京新媒传信科技有限公司 | 一种运用redis构建树形数据结构的方法及装置 |
CN111125449A (zh) * | 2019-12-24 | 2020-05-08 | 腾讯科技(深圳)有限公司 | 对象信息存储方法、装置及存储介质 |
CN114020748A (zh) * | 2021-11-05 | 2022-02-08 | 光大科技有限公司 | 树形结构通讯录存储方法及装置 |
CN114896271A (zh) * | 2022-06-09 | 2022-08-12 | 城云科技(中国)有限公司 | 一种高效维护节点全路径的方法、装置及应用 |
CN115328366A (zh) * | 2022-08-11 | 2022-11-11 | 北京智慧星光信息技术有限公司 | 基于全路径计算的千万级树形节点搜索展示方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20010109945A (ko) * | 2000-06-05 | 2001-12-12 | 박동주 | 비공간검색조건이 포함된 케이-최근접 질의를 위한알에스트리구조 및 점증적 최근접 방법 |
US6411951B1 (en) * | 1998-12-16 | 2002-06-25 | Microsoft Corporation | Evaluating SQL subqueries |
CN101470727A (zh) * | 2007-12-24 | 2009-07-01 | 新奥特(北京)视频技术有限公司 | 一种树形数据编辑处理的方法及系统 |
CN104598517A (zh) * | 2014-12-09 | 2015-05-06 | 北京网梯科技发展有限公司 | 基于普通数据库的树型结构表的存储与查询技术 |
-
2017
- 2017-02-16 CN CN201710084547.8A patent/CN106897408A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6411951B1 (en) * | 1998-12-16 | 2002-06-25 | Microsoft Corporation | Evaluating SQL subqueries |
KR20010109945A (ko) * | 2000-06-05 | 2001-12-12 | 박동주 | 비공간검색조건이 포함된 케이-최근접 질의를 위한알에스트리구조 및 점증적 최근접 방법 |
CN101470727A (zh) * | 2007-12-24 | 2009-07-01 | 新奥特(北京)视频技术有限公司 | 一种树形数据编辑处理的方法及系统 |
CN104598517A (zh) * | 2014-12-09 | 2015-05-06 | 北京网梯科技发展有限公司 | 基于普通数据库的树型结构表的存储与查询技术 |
Non-Patent Citations (1)
Title |
---|
DRINKJAVA2: "发明了一种新的树结构数据库存储方案", 《HTTPS://DRINKJAVA2.ITEYE.COM/BLOG/2353983》 * |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110309144A (zh) * | 2018-03-22 | 2019-10-08 | 北京新媒传信科技有限公司 | 一种运用redis构建树形数据结构的方法及装置 |
CN109062936A (zh) * | 2018-06-15 | 2018-12-21 | 中国平安人寿保险股份有限公司 | 一种数据查询方法、计算机可读存储介质及终端设备 |
CN109062936B (zh) * | 2018-06-15 | 2023-10-31 | 中国平安人寿保险股份有限公司 | 一种数据查询方法、计算机可读存储介质及终端设备 |
CN109558128A (zh) * | 2018-10-25 | 2019-04-02 | 平安科技(深圳)有限公司 | json数据解析方法、装置及计算机可读存储介质 |
CN111125449A (zh) * | 2019-12-24 | 2020-05-08 | 腾讯科技(深圳)有限公司 | 对象信息存储方法、装置及存储介质 |
CN111125449B (zh) * | 2019-12-24 | 2020-11-13 | 腾讯科技(深圳)有限公司 | 对象信息存储方法、装置及存储介质 |
CN114020748A (zh) * | 2021-11-05 | 2022-02-08 | 光大科技有限公司 | 树形结构通讯录存储方法及装置 |
CN114896271A (zh) * | 2022-06-09 | 2022-08-12 | 城云科技(中国)有限公司 | 一种高效维护节点全路径的方法、装置及应用 |
CN115328366A (zh) * | 2022-08-11 | 2022-11-11 | 北京智慧星光信息技术有限公司 | 基于全路径计算的千万级树形节点搜索展示方法和系统 |
CN115328366B (zh) * | 2022-08-11 | 2023-09-19 | 北京智慧星光信息技术有限公司 | 基于全路径计算的千万级树形节点搜索展示方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106897408A (zh) | 一种实现快速查询树形结构数据指定节点下级的方法 | |
CN102819536B (zh) | 树型数据处理方法及装置 | |
CN103561133B (zh) | 一种ip地址归属信息索引方法及快速查询方法 | |
CN104866593B (zh) | 一种基于知识图谱的数据库搜索方法 | |
CN104809190B (zh) | 一种树形结构数据的数据库存取方法 | |
CN102662974B (zh) | 一种基于邻接节点树的网络图索引方法 | |
CN102484610B (zh) | 路由表建立方法和装置及路由表查找方法和装置 | |
CN102867059A (zh) | 一种树形结构中数据的处理方法和系统 | |
CN103646032A (zh) | 一种基于本体和受限自然语言处理的数据库查询方法 | |
CN105630803B (zh) | 文档型数据库建立索引的方法和装置 | |
CN110928882B (zh) | 一种基于改进红黑树的内存数据库索引方法及系统 | |
Fletcher et al. | Efficient regular path query evaluation using path indexes | |
CN102737108B (zh) | 处理流程图的方法及装置 | |
CN103092992B (zh) | 基于Key/Value型NoSQL数据库的矢量数据先序四叉树编码和索引方法 | |
WO2007065207A1 (en) | A succinct index structure for xml | |
CN106844089A (zh) | 一种用于恢复树形数据存储的方法与设备 | |
CN103902700A (zh) | 树形结构的数据处理方法 | |
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 | |
CN103942267A (zh) | 应用于在线教育系统中的树形数据结构的建立方法 | |
CN113486034B (zh) | 一种矢量图层及图斑的历史版本回溯方法 | |
CN103345536B (zh) | 一种语义关联索引方法 | |
CN109686413A (zh) | 一种基于es倒排索引的化学分子式检索方法 | |
CN105025013A (zh) | 基于优先级Trie树的动态IP匹配模型 | |
CN106446086A (zh) | 用于云计算环境的树结构操作方法和系统 | |
CN106815346A (zh) | 一种分级码多级数据的同步迁移方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170627 |