CN104809190B - 一种树形结构数据的数据库存取方法 - Google Patents
一种树形结构数据的数据库存取方法 Download PDFInfo
- Publication number
- CN104809190B CN104809190B CN201510191491.7A CN201510191491A CN104809190B CN 104809190 B CN104809190 B CN 104809190B CN 201510191491 A CN201510191491 A CN 201510191491A CN 104809190 B CN104809190 B CN 104809190B
- Authority
- CN
- China
- Prior art keywords
- node
- index
- database
- nodes
- thread
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种树形结构数据的数据库存取方法,该方法包括:使用面向对象方法抽象数据逻辑,建立树形结构数据模型;使用多线程技术,在主线程之外建立数据存取线程;根据树形结构的节点信息,建立对应的关系型数据库数据表;在数据库中建立数据节点增加、删除、修改和查询等存储过程。本发明方法克服了占用客户端的CPU时间和使用深度递归造成的栈溢出的问题,提高了数据的增加、删除、修改和查询的效率。
Description
技术领域
本发明涉及计算机应用领域,尤其涉及一种树形结构数据的数据库存取方法。
背景技术
关系型数据库储存非线性关系的数据一般采用的外键,多表连接等方式,不仅不能发挥关系型数据库的查询优势,而且浪费大量存储空间,造成数据冗余。常用的算法有路径表示法(Path Enumerations)、邻接表表示法(Adjacency List)、闭包表表示法(ClosureTable)等。
路径表示法需要记录当前节点的所有父亲节点在一个数据实体上面,为了记录所有节点的父节点,数据库的每一个表格都要为此开辟等于树深度N的字段量。
邻接表模型是在原有数据信息的基础上增加一个记录当前节点的父亲节点ID的字段。增加节点时只用添加一条记录即可;删除节点时,若节点是叶子节点只用直接删除,若是非叶子节点则需要递归删除所有的直接和间接孩子节点;在查询节点时,同样要用递归操作才能实现查找从根节点到查询节点的信息
闭包表表示法维护了两张表,一张表是原始的信息,另一张表保存了所有的节点的孩子节点信息;该方法解决了数据完整性的问题,部分解决了增加和删除是否困难和容易出错的问题,但是这种方法以增加一个表格和浪费将近一倍的数据行的方式来实现了相对较优的方案,而且在查询方面由于涉及两个表的操作,复杂性过高。
嵌套结合表示法对每一个节点,增加两个字段,一个左索引号(Left_Index)和一个右索引号(Right_Index),索引号组成的区间[Left_Index, Right_Index]表示一个节点的起始和结束的范围,这两个数的差值表示当前节点的所有子节点的个数。利用索引提供的信息对数据节点进行操作节省了存储空间,提高了查询效率。
嵌套集合模型能快速的查询节点所处位置的路径信息和子节点信息,但是,在添加和删除时需要修改所有父节点的左右索引值,因此需要大量的CPU的时间。为了减少占用客户端的CPU时间和避免使用深度递归造成的使用困难,我们使用到数据库的高级特性。
一方面,建立节点层次数量视图,利用数据库的触发器,调用存储在数据库的添加和删除的存储过程,该存储过程会触发我们的添加和删除触发器,然后由数据库服务器处理触发程序,这样就用异步的思想把客户端等待的时间解放出来。
另一方面,把测点的ID用路径表示法的思路来表示,这样在修改单个节点的时候不用一个个的计算直接父节点的数值范围。图1测点ID的组成图,下层节点的ID是上层所有ID的叠加,中间用下划线隔开这样就能让节点的ID唯一化。
发明内容
本发明的目的在于针对现有技术的不足,提供一种树形结构数据的数据库存取方法,能够高效方便的同时对数据库中的非线性数据进行增加、删除、修改和查询等操作。
本发明的目的是通过以下技术方案来实现的:一种树形结构数据的数据库存取方法,包括以下步骤:
(1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段;
(2)在当前工作的主线程之外建立数据库处理工作线程;
(3)主线程将对节点的数据库操作命令发送给工作线程;
(4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系;
(5)根据步骤4中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询;
(6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。
进一步地,所述步骤(2)中,数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行。
本发明的有益效果是:本发明方法克服了占用客户端的CPU时间和使用深度递归造成的栈溢出的问题,提高了数据的增加、删除、修改和查询的效率。
附图说明
图1为测点ID的形成方式;
图2为增加一个节点的嵌套集合模型算法流程图;
图3为查询一个节点的路径嵌套集合模型算法流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步详细说明。
本发明一种树形结构数据的数据库存取方法,包括以下步骤:
(1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段;
(2)在当前工作的主线程之外建立数据库处理工作线程;数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行;
(3)主线程将对节点的数据库操作命令发送给工作线程;
(4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系;
(5)根据步骤4中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询;
(6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。
实施例
根据属性关系建立树状数据模型,树状结构中每个节点都有一致的属性域,数据域和指针域。整棵树只有一个根节点,每个节点可以有任意多个孩子节点,每个孩子节点只能有一个双亲节点。树状数据结构节点建立完之后可以对每一个节点进行遍历操作。主线程发送数据库操作命令给数据库操作线程,数据库操作线程调用相应的存储过程返回结果。
图1为测点ID的形成方式;图2是增加一个节点的算法流程图,增加一个节点时首先要判断是否为根节点,如果根节点不存在那么插入的节点为根节点,左右索引即为[1,2],如果当前的节点不是根节点,则要获得父节点的左右索引值[PL, PR],然后查找并且更新所有节点的右索引大于PR的节点,右节点索引值增加2,同时该节点的左索引也要加2,最后添加新节点,这时新节点的左索引为PR,右节点索引值为PR+2。删除的过程是这个过程的逆过程,修改的算法 和这个算法类似。
图3是查询节点的流程图,记当前节点的索引值为[L, R],那么,当前节点的孩子节点数量为N=[R-L-1]/2. 而查询所有孩子节点信息也只用一条SQL语句即可完成。可以看出查询孩子节点个数和信息十分方便。在查询所有父亲节点的路径时,只需要获得所有索引值满足左索引小于L,右节点索引值大于R即可。这里为了方便为树状表建立了层序遍历的视图,用视图方式避免了每次计算N的值,减少计算量。
Claims (1)
1.一种树形结构数据的数据库存取方法,其特征在于,包括以下步骤:
(1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段;
(2)在当前工作的主线程之外建立数据库处理工作线程;数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行;
(3)主线程将对节点的数据库操作命令发送给工作线程;
(4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系;
(5)根据步骤(4)中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询;
增加节点时:首先要判断是否为根节点,如果根节点不存在那么插入的节点为根节点,左右索引即为[1,2],如果当前的节点不是根节点,则要获得父节点的左右索引值[PL,PR],然后查找并且更新所有节点的右索引大于PR的节点,右节点索引值增加2,同时该节点的左索引也要加2,最后添加新节点,这时新节点的左索引为PR,右节点索引值为PR+2;删除节点的过程是增加节点的过程的逆过程;
查询节点时:记当前节点的索引值为[L,R],则当前节点的孩子节点数量为N=[R-L-1]/2,查询所有孩子节点信息只用一条SQL语句即可完成;在查询所有父亲节点的路径时,只需要获得所有索引值满足左索引小于L,右节点索引值大于R即可;
(6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510191491.7A CN104809190B (zh) | 2015-04-21 | 2015-04-21 | 一种树形结构数据的数据库存取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510191491.7A CN104809190B (zh) | 2015-04-21 | 2015-04-21 | 一种树形结构数据的数据库存取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809190A CN104809190A (zh) | 2015-07-29 |
CN104809190B true CN104809190B (zh) | 2018-07-31 |
Family
ID=53694012
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510191491.7A Active CN104809190B (zh) | 2015-04-21 | 2015-04-21 | 一种树形结构数据的数据库存取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809190B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107180053B (zh) * | 2016-03-11 | 2020-10-20 | 中国移动通信集团河北有限公司 | 一种数据仓库优化方法和装置 |
CN107608859A (zh) * | 2017-09-29 | 2018-01-19 | 郑州云海信息技术有限公司 | 存储系统状态监控方法、装置、设备及计算机存储介质 |
CN107844527A (zh) * | 2017-10-13 | 2018-03-27 | 平安科技(深圳)有限公司 | 网页地址去重方法、电子设备及计算机可读存储介质 |
CN110019223A (zh) * | 2017-12-21 | 2019-07-16 | 天津数观科技有限公司 | 一种基于数据存储模型的生成数据族谱的方法 |
CN110765123A (zh) * | 2018-07-09 | 2020-02-07 | 株式会社日立制作所 | 基于树形结构的材料数据的存储方法、装置和系统 |
CN109542854B (zh) * | 2018-11-14 | 2020-11-24 | 网易(杭州)网络有限公司 | 数据压缩方法、装置、介质及电子设备 |
CN109741034B (zh) * | 2019-01-03 | 2021-02-09 | 中国农业银行股份有限公司 | 一种网格树形组织管理方法及装置 |
CN111506552B (zh) * | 2019-01-30 | 2023-10-31 | 宁波创元信息科技有限公司 | 一种树状结构的动态数据库设计方法及系统 |
CN110377565A (zh) * | 2019-07-24 | 2019-10-25 | 东软集团股份有限公司 | 一种多媒体数据库的同步方法及车机 |
CN110515977A (zh) * | 2019-08-26 | 2019-11-29 | 深圳追一科技有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
CN111198879A (zh) * | 2019-11-12 | 2020-05-26 | 恒大智慧科技有限公司 | 基于智慧社区的业务数据存储方法及系统 |
CN113515517B (zh) * | 2020-04-09 | 2024-06-04 | 深圳市华胜软件技术有限公司 | 一种基于树形结构数据查询数据集的方法和计算机设备 |
CN111882264B (zh) * | 2020-06-11 | 2024-05-31 | 中国铁道科学研究院集团有限公司电子计算技术研究所 | 铁路用地管理部门模型建立方法及装置 |
CN114240641B (zh) * | 2022-02-24 | 2022-05-20 | 北京锐融天下科技股份有限公司 | 一种信额流转方法及系统 |
CN115840751B (zh) * | 2023-02-21 | 2023-05-12 | 山东经伟晟睿数据技术有限公司 | 一种新型树状数据的编码方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819536B (zh) * | 2011-09-27 | 2015-08-19 | 金蝶软件(中国)有限公司 | 树型数据处理方法及装置 |
CN103902700A (zh) * | 2014-04-01 | 2014-07-02 | 浙江大学 | 树形结构的数据处理方法 |
-
2015
- 2015-04-21 CN CN201510191491.7A patent/CN104809190B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN104809190A (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104809190B (zh) | 一种树形结构数据的数据库存取方法 | |
CN109299102B (zh) | 一种基于Elastcisearch的HBase二级索引系统及方法 | |
Rodriguez et al. | Constructions from dots and lines | |
Jia et al. | Model transformation and data migration from relational database to MongoDB | |
CN102521334B (zh) | 一种基于分类特性和平衡二叉树的数据存储、查询方法 | |
CN107291807B (zh) | 一种基于图遍历的sparql查询优化方法 | |
US20130166600A1 (en) | Segment Matching Search System and Method | |
CN103123650B (zh) | 一种基于整数映射的xml数据库全文索引方法 | |
JP5410514B2 (ja) | X500データモデルをリレーショナル・データベースにマッピングするための方法 | |
CN113094449B (zh) | 基于分布式键值库的大规模知识图谱存储方法 | |
CN101673307A (zh) | 空间数据索引方法及系统 | |
US20140324882A1 (en) | Method and system for navigating complex data sets | |
CN104573022A (zh) | 一种HBase的数据查询方法及装置 | |
Banane et al. | Storing RDF data into big data NoSQL databases | |
CN107526746A (zh) | 管理文档索引的方法和设备 | |
Dritsou et al. | Optimizing query shortcuts in RDF databases | |
Liang et al. | Mid-model design used in model transition and data migration between relational databases and nosql databases | |
CN111897971B (zh) | 一种适用于电网调度控制领域的知识图谱管理方法及系统 | |
WO2014011308A1 (en) | Encoded data processing | |
Stanescu et al. | An algorithm for mapping the relational databases to mongodb-a case study | |
Bornhövd et al. | Flexible Information Management, Exploration and Analysis in SAP HANA. | |
Yue et al. | 1.06 GIS Databases and NoSQL Databases | |
KR20180077830A (ko) | 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
Zhou et al. | A study on ontology storage based on relational database | |
RU2605387C2 (ru) | Способ и система для хранения данных графов |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |