一种树形结构数据的数据库存取方法

文档序号:8487855阅读:343来源:国知局
一种树形结构数据的数据库存取方法
【技术领域】
[0001]本发明涉及计算机应用领域,尤其涉及一种树形结构数据的数据库存取方法。
【背景技术】
[0002]关系型数据库储存非线性关系的数据一般采用的外键,多表连接等方式,不仅不能发挥关系型数据库的查询优势,而且浪费大量存储空间,造成数据冗余。常用的算法有路径表示法(Path Enumerat1ns)、邻接表表示法(Adjacency List)、闭包表表示法(ClosureTable)等。
[0003]路径表示法需要记录当前节点的所有父亲节点在一个数据实体上面,为了记录所有节点的父节点,数据库的每一个表格都要为此开辟等于树深度N的字段量。
[0004]邻接表模型是在原有数据信息的基础上增加一个记录当前节点的父亲节点ID的字段。增加节点时只用添加一条记录即可;删除节点时,若节点是叶子节点只用直接删除,若是非叶子节点则需要递归删除所有的直接和间接孩子节点;在查询节点时,同样要用递归操作才能实现查找从根节点到查询节点的信息
闭包表表示法维护了两张表,一张表是原始的信息,另一张表保存了所有的节点的孩子节点信息;该方法解决了数据完整性的问题,部分解决了增加和删除是否困难和容易出错的问题,但是这种方法以增加一个表格和浪费将近一倍的数据行的方式来实现了相对较优的方案,而且在查询方面由于涉及两个表的操作,复杂性过高。
[0005]嵌套结合表示法对每一个节点,增加两个字段,一个左索引号(Left_Index)和一个右索引号(Right_Index),索引号组成的区间[Left_Index, Right_Index]表示一个节点的起始和结束的范围,这两个数的差值表示当前节点的所有子节点的个数。利用索引提供的信息对数据节点进行操作节省了存储空间,提高了查询效率。
[0006]嵌套集合模型能快速的查询节点所处位置的路径信息和子节点信息,但是,在添加和删除时需要修改所有父节点的左右索引值,因此需要大量的CPU的时间。为了减少占用客户端的CPU时间和避免使用深度递归造成的使用困难,我们使用到数据库的高级特性。
[0007]—方面,建立节点层次数量视图,利用数据库的触发器,调用存储在数据库的添加和删除的存储过程,该存储过程会触发我们的添加和删除触发器,然后由数据库服务器处理触发程序,这样就用异步的思想把客户端等待的时间解放出来。
[0008]另一方面,把测点的ID用路径表示法的思路来表示,这样在修改单个节点的时候不用一个个的计算直接父节点的数值范围。图1测点ID的组成图,下层节点的ID是上层所有ID的叠加,中间用下划线隔开这样就能让节点的ID唯一化。

【发明内容】

[0009]本发明的目的在于针对现有技术的不足,提供一种树形结构数据的数据库存取方法,能够高效方便的同时对数据库中的非线性数据进行增加、删除、修改和查询等操作。
[0010]本发明的目的是通过以下技术方案来实现的:一种树形结构数据的数据库存取方法,包括以下步骤:
(1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段;
(2)在当前工作的主线程之外建立数据库处理工作线程;
(3)主线程将对节点的数据库操作命令发送给工作线程;
(4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系;
(5)根据步骤4中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询;
(6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。[0011 ] 进一步地,所述步骤(2)中,数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行。
[0012]本发明的有益效果是:本发明方法克服了占用客户端的CPU时间和使用深度递归造成的栈溢出的问题,提高了数据的增加、删除、修改和查询的效率。
【附图说明】
[0013]图1为测点ID的形成方式;
图2为增加一个节点的嵌套集合模型算法流程图;
图3为查询一个节点的路径嵌套集合模型算法流程图。
【具体实施方式】
[0014]下面结合附图和具体实施例对本发明作进一步详细说明。
[0015]本发明一种树形结构数据的数据库存取方法,包括以下步骤:
(1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段;
(2)在当前工作的主线程之外建立数据库处理工作线程;数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行;
(3)主线程将对节点的数据库操作命令发送给工作线程;
(4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系;
(5)根据步骤4中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询;
(6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。实施例
[0016]根据属性关系建立树状数据模型,树状结构中每个节点都有一致的属性域,数据域和指针域。整棵树只有一个根节点,每个节点可以有任意多个孩子节点,每个孩子节点只能有一个双亲节点。树状数据结构节点建立完之后可以对每一个节点进行遍历操作。主线程发送数据库操作命令给数据库操作线程,数据库操作线程调用相应的存储过程返回结果O
[0017]图1为测点ID的形成方式;图2是增加一个节点的算法流程图,增加一个节点时首先要判断是否为根节点,如果根节点不存在那么插入的节点为根节点,左右索引即为[1,2],如果当前的节点不是根节点,则要获得父节点的左右索引值[PL,PR],然后查找并且更新所有节点的右索引大于PR的节点,右节点索引值增加2,同时该节点的左索引也要加2,最后添加新节点,这时新节点的左索引为PR,右节点索引值为PR+2。删除的过程是这个过程的逆过程,修改的算和这个算法类似。
[0018]图3是查询节点的流程图,记当前节点的索引值为[L,R],那么,当前节点的孩子节点数量为N=[R-L-l]/2.而查询所有孩子节点信息也只用一条SQL语句即可完成。可以看出查询孩子节点个数和信息十分方便。在查询所有父亲节点的路径时,只需要获得所有索引值满足左索引小于L,右节点索引值大于R即可。这里为了方便为树状表建立了层序遍历的视图,用视图方式避免了每次计算N的值,减少计算量。
【主权项】
1.一种树形结构数据的数据库存取方法,其特征在于,包括以下步骤: (1)在内存中建立数据的树状关系模型;所述树状关系模型仅有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段; (2)在当前工作的主线程之外建立数据库处理工作线程; (3)主线程将对节点的数据库操作命令发送给工作线程; (4)将所有节点的信息统一抽象表示到一张数据库表里,建立节点的关系型数据库存储表,在节点的关系型数据库存储表中增加两个索引字段用于标识节点的层级关系; (5)根据步骤4中的索引字段描述的层级关系建立节点操作的存储过程,存储过程使用前序遍历算法,根据索引字段范围随时更新存储表中的节点关系;所述存储过程包括节点的增加、删除、修改和查询; (6)数据库处理工作线程根据主线程的操作命令,调用步骤(5)中相应的存储过程。
2.根据权利要求1所述的一种树形结构数据的数据库存取方法,其特征在于,所述步骤(2)中,数据库处理工作线程负责数据存取操作,数据库处理工作线程和主线程异步运行。
【专利摘要】本发明公开了一种树形结构数据的数据库存取方法,该方法包括:使用面向对象方法抽象数据逻辑,建立树形结构数据模型;使用多线程技术,在主线程之外建立数据存取线程;根据树形结构的节点信息,建立对应的关系型数据库数据表;在数据库中建立数据节点增加、删除、修改和查询等存储过程。本发明方法克服了占用客户端的CPU时间和使用深度递归造成的栈溢出的问题,提高了数据的增加、删除、修改和查询的效率。
【IPC分类】G06F17-30
【公开号】CN104809190
【申请号】CN201510191491
【发明人】王友钊, 黄静
【申请人】浙江大学
【公开日】2015年7月29日
【申请日】2015年4月21日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1