CN104794196B - 一种树形结构数据的采集和更新方法 - Google Patents

一种树形结构数据的采集和更新方法 Download PDF

Info

Publication number
CN104794196B
CN104794196B CN201510187187.5A CN201510187187A CN104794196B CN 104794196 B CN104794196 B CN 104794196B CN 201510187187 A CN201510187187 A CN 201510187187A CN 104794196 B CN104794196 B CN 104794196B
Authority
CN
China
Prior art keywords
node
tree
data
measuring point
dirty
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
CN201510187187.5A
Other languages
English (en)
Other versions
CN104794196A (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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201510187187.5A priority Critical patent/CN104794196B/zh
Publication of CN104794196A publication Critical patent/CN104794196A/zh
Application granted granted Critical
Publication of CN104794196B publication Critical patent/CN104794196B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种树形结构数据的采集和更新方法,该方法包括:使用面向对象方法抽象数据逻辑,建立树形结构数据模型;使用多线程技术,建立数据采集线程和数据更新线程;根据树形结构数据的是否更新,建立基于B‑树的脏测点树;使用脏测点算法更新数据显示。本发明在测点比较多的情况下,根据脏测点覆盖率高低建立脏测点树,并使用脏测点树建立脏数据回写算法,实现树形结构数据的采集和更新;本发明方法比不使用脏数据处理策略的算法提高了20%左右的更新时间,并且在脏测点覆盖率达到90%以上的时候没有出现更新性能退化的现象,提高了系统的安全性、可靠性。

Description

一种树形结构数据的采集和更新方法
技术领域
本发明涉及计算机应用领域,尤其涉及一种树形结构数据的采集和更新方法。
背景技术
树形结构节点数据更新算法采用集中测点数据,一次刷新更新所有测点数据的策略,只适用解决数据规模比较小的状况,而大型变电站测点数较多时,一次性更新所有温度测点信息,会出现大批量数据更新引起占用网络带宽等较多的系统资源,而导致系统性能急剧下降,甚至产生假死、当机等问题。
在某些系统中,树形结构数据并不需要全部更新,尤其是当不更新的节点较多时算法效率低。把需要更新的测点定义为脏测点,根据脏测点在所有测点中所占的比例定义为脏测点覆盖率,建立基于脏测点覆盖率的测点采集和算法可以有效解决大数据采集、更新问题。在建立脏测点树方法可以使用Bitmap算法,Hash链表算法和B-树算法。
Bitmap算法可以把一个容器内的元素按照索引映射为Bitmap的一个位上,Bitmap的实现方式通常是用一个整形变量或者整形数组作为映射,把源数据的键或者值通过映射,一一映射到Bitmap上面,使用时只用检测Bitmap上面的相应位是否置位就可以判断源数据是否发生改变。这种算法在脏测点的更新复杂度为O(n2) (其中n为每一层节点的数量),在脏测点覆盖率低于80%的时候效率较高。
可以看出,每次更新图元时用检查Bitmap的操作代替了遍历操作,而Bitmap的遍历只需要做逻辑与运算即可,因此提高了查询的效率。但是我们注意到随着要脏测点的增多,脏测点的覆盖率增大,检查Bitmap是否有置位的操作就成为了该算法的瓶颈,尤其覆盖率达到100%时时,该算法比传统的算法效率更低。研究发现该算法随着脏测点覆盖率的增加而逐渐变差,在脏测点覆盖率为90%以下的时候效果较理想,超过90%之后比传统的更低。
链表(Linked list)是一种线性表,其逻辑操作连续而实际内存布局离散的数据结构。链表与数组相比能够方便的增删节点和进行内存动态管理,但是读取时间复杂度比较高,访问节点的时间复杂度为O(n),在脏测点覆盖率接近100%的时候仍然有效。
使用链表法的时候,在每个变电站机柜上面增加一个空闲头指针pdirty_head,用来串联所有的脏测点,采集的时候,先比较测点的新旧数据值,若想等则跳过;若不相等则添加到pdirty_head指向的脏测点链表中,在更新完毕后删除脏测点pdirty_head重新置空。这样捡测是否有脏测点的时候只用检测pdirty_head是否为空即可,但是在更新的时候,还是要通过遍历链表来实现测点的一一对应,采集温度的算法,更新温度的算法流程跟Bitmap算法一致。
Bitmap算法和基于链表的算法在脏测点覆盖率低的情况下有效,并且在实现方面方便,但是都存在这随着脏测点覆盖率增加性能退化的问题。而性能退化的原因都是随着脏测点的增多,需要遍历的测点逐线性增加,最终退化成线性遍历。为了避免遍历算法的性能退化,使用基于B-树的的平衡脏数据树的回写算法,其算法更新复杂度为O(logmn)(m为B树节点最大数目),B-树的算法在脏测点覆盖率达到90%以上时仍具有较好的更新效率。
B-树(B-tree)是一种多路查找树,它本质上来说是一棵二叉查找树,不同与普通二叉查找树的是,它的内部节点不是一个而是一个集合。一棵m阶的B-树满足一下条件:
1.每个节点至多有m棵子树;
2.除根节点外,其它每个分支节点至少有m/2棵子树;
3.根节点至少有两棵子树(除非B-树只包含一个节点);
4.所有的叶节点在同一层,B-树的叶节点可以看成一种外部节点,不包含任何信息;
5.有j个孩子的非叶节点恰好含有j-1个关键字,关键字按递增的顺序排列。
在B-树中,内部(非叶子)节点可以拥有预先设定范围数量内的多个子节点。当数据被插入或从一个节点中移除,它的子节点数量发生变化。为了维持在预先设定的数量范围内,内部节点可能会被连结或者分离。因为子节点数量有一定的允许范围,所以B-树不需要像其他自平衡查找树那样频繁地重新保持平衡,但是由于节点没有被完全填充,可能浪费了一些空间。子节点数量的上界和下界依特定的实现而设置。B-树中每一个内部节点会包含一定数量的键值。通常,键值的数量被选定在d和2d 之间。在实际中,键值占用了节点中大部分的空间。因数2将保证节点可以被拆分或组合。如果一个内部节点有2d 个键值,那么添加一个键值给此节点的过程,将会拆分2d键值为2个d数量键值的节点,并把此键值添加给父节点。每一个拆分的节点需要最小数目的键值。相似地,如果一个内部节点和他的邻居两者都有d个键值,那么将通过它与邻居的合并来删除一个键值。删除此键值将导致此节点拥有d-1个键值;与邻居的合并则加上d个键值,再加上从邻居节点的父节点移来的一个键值。结果为完全填充的2d个键值。
一个B-树通过约束所有叶子节点在相同深度来保持平衡。深度在元素添加至树的过程中缓慢增长,而整体深度极慢地增长,并导致所有叶子节点与根节点距离加1。在节点存取时间远超过里层节点存取时间的条件下,B-树在实现中很多优势,因为如此存取节点的开销被分摊到里层节点的多次操作上。这通常出现在当节点存储在二级存储器如硬盘存储器上。通过最大化内部里层节点的子节点的数量,树的高度减小,存取节点的开销被缩减。另外,重新平衡树的操作也更少出现。
发明内容
本发明的目的在于针对现有技术的不足,提供一种树形结构数据的采集和更新方法。
本发明的目的是通过以下技术方案来实现的:一种树形结构数据的采集和更新方法,包括以下步骤:
(1)在内存中建立数据的树状关系数据结构;所述树状关系数据结构中只有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段,
(2)建立测点数据采集线程和测点数据更新线程;
(3)测点数据采集线程根据采集数据的ID查找树状关系数据结构中对应的节点;若该节点存在,则将采集数据与该节点中的数据进行比较,如果数据发生变化,则将该采集数据保存到该节点中,并对该节点做标记,否则不保存数据;若该节点不存在,则首先在树状关系数据结构中建立该节点,然后直接将采集数据保存到该节点中,并对该节点做标记;最终建立基于B-树的脏测点树;所述在树状关系数据结构中建立该节点具体包括以下子步骤:
(3.1)查找节点要插入的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树,如果找到查找节点进行步骤(3.2);
(3.2)若查找到的节点不是叶子节点,继续查找,进行步骤(3.1),否则进入步骤(3.3);
(3.3)若查找到的节点个数小于m,即不饱和,直接插入树状关系数据结构;若已经饱和则进入步骤(3.4);m为节点数组的长度;
(3.4)找到要插入节点在树状关系数据结构中的位置,记为index,将该节点分裂成两个节点,将其插入到当前节点中作为左右孩子,其中[0, index)的节点作为左孩子,[index, m]的节点作为右孩子,并且根据节点的值映射到叶子节点上;
(4)测点数据更新线程使用脏测点树更新测点数据的显示,具体包括以下子步骤:
(4.1)根据节点的ID查找节点的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树;
(4.2)若在树状关系数据结构中找到相应的节点,则在节点数组中遍历查找,如果查找到返回数据,否则返回空值。
进一步地,所述步骤(2)中,所述测点数据采集线程负责数据的采集和脏测点树的建立,所述测点数据更新线程负责更新测点数据,两个线程异步运行。
本发明的有益效果是:本发明在测点比较多的情况下,根据脏测点覆盖率高低建立脏测点树,并使用脏测点树建立脏数据回写算法,实现树形结构数据的采集和更新;本发明方法比不使用脏数据处理策略的算法提高了20%左右的更新时间,并且在脏测点覆盖率达到90%以上的时候没有出现更新性能退化的现象,提高了系统的安全性、可靠性。
具体实施方式
本发明一种树形结构数据的采集和更新方法,包括以下步骤:
(1)在内存中建立数据的树状关系数据结构;所述树状关系数据结构中只有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段,
(2)建立测点数据采集线程和测点数据更新线程;所述测点数据采集线程负责数据的采集和脏测点树的建立,所述测点数据更新线程负责更新测点数据,两个线程异步运行;
(3)测点数据采集线程根据采集数据的ID查找树状关系数据结构中对应的节点;若该节点存在,则将采集数据与该节点中的数据进行比较,如果数据发生变化,则将该采集数据保存到该节点中,并对该节点做标记,否则不保存数据;若该节点不存在,则首先在树状关系数据结构中建立该节点,然后直接将采集数据保存到该节点中,并对该节点做标记;最终建立基于B-树的脏测点树;所述在树状关系数据结构中建立该节点具体包括以下子步骤:
(3.1)查找节点要插入的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树,如果找到查找节点进行步骤(3.2);
(3.2)若查找到的节点不是叶子节点,继续查找,进行步骤(3.1),否则进入步骤(3.3);
(3.3)若查找到的节点个数小于m,即不饱和,直接插入树状关系数据结构;若已经饱和则进入步骤(3.4);m为节点数组的长度;
(3.4)找到要插入节点在树状关系数据结构中的位置,记为index,将该节点分裂成两个节点,将其插入到当前节点中作为左右孩子,其中[0, index)的节点作为左孩子,[index, m]的节点作为右孩子,并且根据节点的值映射到叶子节点上;
(4)测点数据更新线程使用脏测点树更新测点数据的显示,具体包括以下子步骤:
(4.1)根据节点的ID查找节点的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树;
(4.2)若在树状关系数据结构中找到相应的节点,则在节点数组中遍历查找,如果查找到返回数据,否则返回空值。本发明方法比不使用脏数据处理策略的算法提高了20%左右的更新时间,并且在脏测点覆盖率达到90%以上的时候没有出现更新性能退化的现象,提高了系统的安全性、可靠性。

Claims (1)

1.一种树形结构数据的采集和更新方法,其特征在于,包括以下步骤:
(1)在内存中建立数据的树状关系数据结构;所述树状关系数据结构中只有一个根节点,每个节点具有任意多个孩子节点,每个孩子节点仅有一个双亲节点;每个节点具有唯一的ID,且具有相同的属性字段,
(2)建立测点数据采集线程和测点数据更新线程;所述测点数据采集线程负责数据的采集和脏测点树的建立,所述测点数据更新线程负责更新测点数据,两个线程异步运行;
(3)测点数据采集线程根据采集数据的ID查找树状关系数据结构中对应的节点;若该节点存在,则将采集数据与该节点中的数据进行比较,如果数据发生变化,则将该采集数据保存到该节点中,并对该节点做标记,否则不保存数据;若该节点不存在,则首先在树状关系数据结构中建立该节点,然后直接将采集数据保存到该节点中,并对该节点做标记;最终建立基于B-树的脏测点树;所述在树状关系数据结构中建立该节点具体包括以下子步骤:
(3.1)查找节点要插入的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树,如果找到查找节点进行步骤(3.2);
(3.2)若查找到的节点不是叶子节点,继续查找,进行步骤(3.1),否则进入步骤(3.3);
(3.3)若查找到的节点个数小于m,即不饱和,直接插入树状关系数据结构;若已经饱和则进入步骤(3.4);m为节点数组的长度;
(3.4)找到要插入节点在树状关系数据结构中的位置,记为index,将该节点分裂成两个节点,将其插入到当前节点中作为左右孩子,其中[0,index)的节点作为左孩子,[index,m]的节点作为右孩子,并且根据节点的值映射到叶子节点上;
(4)测点数据更新线程使用脏测点树更新测点数据的显示,具体包括以下子步骤:
(4.1)根据节点的ID查找节点的位置,若树状关系数据结构中现有节点的ID比要查找的节点的ID大则查找树状关系数据结构中现有节点的左子树,若比要查找的节点的ID小则查找现有节点的右子树;
(4.2)若在树状关系数据结构中找到相应的节点,则在节点数组中遍历查找,如果查找到返回数据,否则返回空值。
CN201510187187.5A 2015-04-21 2015-04-21 一种树形结构数据的采集和更新方法 Active CN104794196B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510187187.5A CN104794196B (zh) 2015-04-21 2015-04-21 一种树形结构数据的采集和更新方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510187187.5A CN104794196B (zh) 2015-04-21 2015-04-21 一种树形结构数据的采集和更新方法

Publications (2)

Publication Number Publication Date
CN104794196A CN104794196A (zh) 2015-07-22
CN104794196B true CN104794196B (zh) 2018-07-31

Family

ID=53558988

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510187187.5A Active CN104794196B (zh) 2015-04-21 2015-04-21 一种树形结构数据的采集和更新方法

Country Status (1)

Country Link
CN (1) CN104794196B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107562743B (zh) * 2016-06-30 2022-12-02 中兴通讯股份有限公司 数据存储方法和装置、数据查找请求的处理方法和装置
CN106776995B (zh) * 2016-12-06 2020-08-28 北京神舟航天软件技术有限公司 一种基于模型驱动架构的结构化数据树形采集方法
WO2018120233A1 (zh) 2016-12-30 2018-07-05 华为技术有限公司 一种事务处理方法及装置
CN115017158A (zh) * 2022-05-31 2022-09-06 武汉联影医疗科技有限公司 节点信息查询方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402602A (zh) * 2011-11-18 2012-04-04 航天科工深圳(集团)有限公司 一种实时数据库的b+树索引方法及装置
CN103518364A (zh) * 2013-03-19 2014-01-15 华为技术有限公司 分布式存储系统的数据更新方法及服务器
CN104426770A (zh) * 2013-09-09 2015-03-18 中兴通讯股份有限公司 路由查找方法及装置、B-Tree树结构的构建方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8620963B2 (en) * 2012-03-08 2013-12-31 eBizprise Inc. Large-scale data processing system, method, and non-transitory tangible machine-readable medium thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102402602A (zh) * 2011-11-18 2012-04-04 航天科工深圳(集团)有限公司 一种实时数据库的b+树索引方法及装置
CN103518364A (zh) * 2013-03-19 2014-01-15 华为技术有限公司 分布式存储系统的数据更新方法及服务器
CN104426770A (zh) * 2013-09-09 2015-03-18 中兴通讯股份有限公司 路由查找方法及装置、B-Tree树结构的构建方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
树型结构的应用与平衡查找树的研究;毛影;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120215;I138-174 *

Also Published As

Publication number Publication date
CN104794196A (zh) 2015-07-22

Similar Documents

Publication Publication Date Title
CN109376156B (zh) 读取具有存储感知的混合索引的方法
CN102163218B (zh) 基于图索引的图数据库关键词邻近搜索方法
CN104794196B (zh) 一种树形结构数据的采集和更新方法
CN105117415B (zh) 一种优化的ssd数据更新方法
CN107291807B (zh) 一种基于图遍历的sparql查询优化方法
CN105975587B (zh) 一种高性能的内存数据库索引组织与访问方法
US20140337375A1 (en) Data search and storage with hash table-based data structures
CN102984292A (zh) 一种ip段地址集中查找ip地址的方法
CN105243081B (zh) 一种基于形式概念的文件系统目录结构组织方法
CN112000847B (zh) 基于gpu并行的自适应基数树动态索引方法
Zhou et al. Efficient distributed multi-dimensional index for big data management
CN111639075A (zh) 一种基于扁平化r树的非关系数据库矢量数据管理方法
KR101255639B1 (ko) 컬럼 기반 데이터베이스 시스템 및 데이터베이스 시스템의 조인 인덱스를 이용한 조인 처리 방법
CN108717448B (zh) 一种面向键值对存储的范围查询过滤方法和键值对存储系统
Patel et al. Comparison of advance tree data structures
CN102708145A (zh) 数据库处理设备、数据库处理方法及记录介质
Ross et al. Cost-based unbalanced R-trees
CN108153911B (zh) 数据的分布式云存储方法
Yu et al. An efficient multidimension metadata index and search system for cloud data
That et al. LDI: Learned distribution index for column stores
Zhang et al. PaIndex: An online index system for vehicle trajectory data exploiting parallelism
CN109344161A (zh) 一种基于mongodb的海量数据存储方法
CN104462124B (zh) 基于线性哈希表的数据存储平台组织方法和数据存储平台
Jin-ling et al. Study of the AVL-tree index range query based on P2P networks
CN103778198B (zh) 一种空间数据库中分组反向轮廓查询方法

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