CN104794196B - 一种树形结构数据的采集和更新方法 - Google Patents
一种树形结构数据的采集和更新方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 18
- 238000000547 structure data Methods 0.000 title claims abstract description 13
- 229920006395 saturated elastomer Polymers 0.000 claims 1
- 230000015556 catabolic process Effects 0.000 abstract description 5
- 238000006731 degradation reaction Methods 0.000 abstract description 5
- 238000012545 processing Methods 0.000 abstract description 3
- 238000007792 addition Methods 0.000 description 2
- 238000007493 shaping process Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
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)若在树状关系数据结构中找到相应的节点,则在节点数组中遍历查找,如果查找到返回数据,否则返回空值。
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)
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)
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)
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 |
-
2015
- 2015-04-21 CN CN201510187187.5A patent/CN104794196B/zh active Active
Patent Citations (3)
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)
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 |