本发明专利技术公开了一种树形结构数据的采集和更新方法,该方法包括:使用面向对象方法抽象数据逻辑,建立树形结构数据模型;使用多线程技术,建立数据采集线程和数据更新线程;根据树形结构数据的是否更新,建立基于B-树的脏测点树;使用脏测点算法更新数据显示。本发明专利技术在测点比较多的情况下,根据脏测点覆盖率高低建立脏测点树,并使用脏测点树建立脏数据回写算法,实现树形结构数据的采集和更新;本发明专利技术方法比不使用脏数据处理策略的算法提高了20%左右的更新时间,并且在脏测点覆盖率达到90%以上的时候没有出现更新性能退化的现象,提高了系统的安全性、可靠性。
【技术实现步骤摘要】
本专利技术涉及计算机应用领域,尤其涉及。
技术介绍
树形结构节点数据更新算法采用集中测点数据,一次刷新更新所有测点数据的策略,只适用解决数据规模比较小的状况,而大型变电站测点数较多时,一次性更新所有温度测点信息,会出现大批量数据更新引起占用网络带宽等较多的系统资源,而导致系统性能急剧下降,甚至产生假死、当机等问题。在某些系统中,树形结构数据并不需要全部更新,尤其是当不更新的节点较多时算法效率低。把需要更新的测点定义为脏测点,根据脏测点在所有测点中所占的比例定义为脏测点覆盖率,建立基于脏测点覆盖率的测点采集和算法可以有效解决大数据采集、更新问题。在建立脏测点树方法可以使用Bitmap算法,Hash链表算法和B-树算法。Bitmap算法可以把一个容器内的元素按照索引映射为Bitmap的一个位上,Bitmap的实现方式通常是用一个整形变量或者整形数组作为映射,把源数据的键或者值通过映射,--映射到Bitmap上面,使用时只用检测Bitmap上面的相应位是否置位就可以判断源数据是否发生改变。这种算法在脏测点的更新复杂度为0(n2)(其中η为每一层节点的数量),在脏测点覆盖率低于80%的时候效率较高。可以看出,每次更新图元时用检查Bitmap的操作代替了遍历操作,而Bitmap的遍历只需要做逻辑与运算即可,因此提高了查询的效率。但是我们注意到随着要脏测点的增多,脏测点的覆盖率增大,检查Bitmap是否有置位的操作就成为了该算法的瓶颈,尤其覆盖率达到100%时时,该算法比传统的算法效率更低。研宄发现该算法随着脏测点覆盖率的增加而逐渐变差,在脏测点覆盖率为90%以下的时候效果较理想,超过90%之后比传统的更低。链表(Linked list)是一种线性表,其逻辑操作连续而实际内存布局离散的数据结构。链表与数组相比能够方便的增删节点和进行内存动态管理,但是读取时间复杂度比较高,访问节点的时间复杂度为0(n),在脏测点覆盖率接近100%的时候仍然有效。使用链表法的时候,在每个变电站机柜上面增加一个空闲头指针pdirty_head,用来串联所有的脏测点,采集的时候,先比较测点的新旧数据值,若想等则跳过;若不相等则添加到pdirty_head指向的脏测点链表中,在更新完毕后删除脏测点pdirty_head重新置空。这样捡测是否有脏测点的时候只用检测pdirty_head是否为空即可,但是在更新的时候,还是要通过遍历链表来实现测点的一一对应,采集温度的算法,更新温度的算法流程跟Bitmap算法一致。Bitmap算法和基于链表的算法在脏测点覆盖率低的情况下有效,并且在实现方面方便,但是都存在这随着脏测点覆盖率增加性能退化的问题。而性能退化的原因都是随着脏测点的增多,需要遍历的测点逐线性增加,最终退化成线性遍历。为了避免遍历算法的性能退化,使用基于B-树的的平衡脏数据树的回写算法,其算法更新复杂度为O (1gmIi) Cm为B树节点最大数目),B-树的算法在脏测点覆盖率达到90%以上时仍具有较好的更新效率。B-树(B-tree)是一种多路查找树,它本质上来说是一棵二叉查找树,不同与普通二叉查找树的是,它的内部节点不是一个而是一个集合。一棵m阶的B-树满足一下条件: 1.每个节点至多有m棵子树; 2.除根节点外,其它每个分支节点至少有m/2棵子树; 3.根节点至少有两棵子树(除非B-树只包含一个节点); 4.所有的叶节点在同一层,B-树的叶节点可以看成一种外部节点,不包含任何信息; 5.有j个孩子的非叶节点恰好含有j_l个关键字,关键字按递增的顺序排列。在B-树中,内部(非叶子)节点可以拥有预先设定范围数量内的多个子节点。当数据被插入或从一个节点中移除,它的子节点数量发生变化。为了维持在预先设定的数量范围内,内部节点可能会被连结或者分离。因为子节点数量有一定的允许范围,所以B-树不需要像其他自平衡查找树那样频繁地重新保持平衡,但是由于节点没有被完全填充,可能浪费了一些空间。子节点数量的上界和下界依特定的实现而设置。B-树中每一个内部节点会包含一定数量的键值。通常,键值的数量被选定在d和2d之间。在实际中,键值占用了节点中大部分的空间。因数2将保证节点可以被拆分或组合。如果一个内部节点有2d个键值,那么添加一个键值给此节点的过程,将会拆分2d键值为2个d数量键值的节点,并把此键值添加给父节点。每一个拆分的节点需要最小数目的键值。相似地,如果一个内部节点和他的邻居两者都有d个键值,那么将通过它与邻居的合并来删除一个键值。删除此键值将导致此节点拥有d-Ι个键值;与邻居的合并则加上d个键值,再加上从邻居节点的父节点移来的一个键值。结果为完全填充的2d个键值。一个B-树通过约束所有叶子节点在相同深度来保持平衡。深度在元素添加至树的过程中缓慢增长,而整体深度极慢地增长,并导致所有叶子节点与根节点距离加I。在节点存取时间远超过里层节点存取时间的条件下,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)找到要插入节点在树状关系数据当前第1页1 2 本文档来自技高网...
【技术保护点】
一种树形结构数据的采集和更新方法,其特征在于,包括以下步骤:(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)若在树状关系数据结构中找到相应的节点,则在节点数组中遍历查找,如果查找到返回数据,否则返回空值。...
【技术特征摘要】
【专利技术属性】
技术研发人员:王友钊,黄静,
申请(专利权)人:浙江大学,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。