发明内容
有鉴于此,本发明提供集群数据库测点的访问方法及装置,以解决现有技术中利用上述B+树结构的索引查找测点时,访问硬盘次数较多,导致测点查找效率较低的技术问题。本发明提供的技术方案如下:
一种集群数据库测点的访问方法,应用于在内存中建立的Treap树,所述Treap树的每个节点存储预设索引块的块信息,每个所述索引块包含多个测点的标识及每个测点标识对应的测点地址,每个所述块信息包括各自索引块的测点标识范围及访问次数,各个节点的访问次数依据预设节点查找顺序依次降低,且所述内存中还存储有依据访问次数的高低排序读取的预设数量的索引块,该方法包括:
在预设周期内,接收测点访问请求;其中,所述测点访问请求中包含目标测点标识;
依据所述目标测点标识及所述节点查找顺序,在所述Treap树中,查找到目标节点,并增加所述目标节点在所述预设周期内的访问次数;其中,所述目标节点为测点标识范围内包含所述目标测点标识的节点;
查找所述内存中是否存在所述目标节点对应的目标索引块;
若是,在所述目标索引块中确定所述目标测点标识对应的测点地址,并依据该测点地址对测点进行访问;
当所述预设周期结束时,利用所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,以使所述Treap树中各个节点的访问次数依据所述预设节点查找顺序依次降低。
上述方法,优选地,每个所述块信息包括的各自索引块的测点标识为各自索引块的最大测点标识及最小测点标识,
其中,所述依据所述目标测点标识及所述节点查找顺序,在所述Treap树中,查找到目标节点,包括:
依据所述节点查找顺序,在所述Treap树中,查找到所述目标测点标识在最大测点标识及最小测点标识范围内的目标节点。
上述方法,优选地,所述依据所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,包括:
获得所述预设周期内目标节点增加后的访问次数,并获得该预设周期内所有节点的访问总次数;
将所述增加后的访问次数与所述访问总次数的比值,确定为所述目标节点的访问优先级;
当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为左子树时,对所述Treap树进行右旋;
当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为右子树时,对所述Treap树进行左旋。
上述方法,优选地,还包括:
当所述内存中不存在所述目标节点对应的目标索引块时,将访问次数最低的索引块置换出内存,并将所述目标索引块读取至内存。
上述方法,优选地,每个所述索引块的容量相同且均未超过磁盘块容量,其中,所述索引块存储所述多个测点标识,包括:
所述索引块具有预设个数的分块,且非空分块中的测点标识依次排序;
或,
所述索引块具有预设个数的分块,首个空块中存储新增的测点标识。
本发明还提供了一种集群数据库测点的访问装置,应用于在内存中建立的Treap树,所述Treap树的每个节点存储预设索引块的块信息,每个所述索引块包含多个测点的标识及每个测点标识对应的测点地址,每个所述块信息包括各自索引块的测点标识范围及访问次数,各个节点的访问次数依据预设节点查找顺序依次降低,且所述内存中还存储有依据访问次数的高低排序读取的预设数量的索引块,该装置包括:
访问请求接收单元,用于在预设周期内,接收测点访问请求;其中,所述测点访问请求中包含目标测点标识;
目标节点查找单元,用于依据所述目标测点标识及所述节点查找顺序,在所述Treap树中,查找到目标节点;
访问次数增加单元,用于增加所述目标节点在所述预设周期内的访问次数;其中,所述目标节点为测点标识范围内包含所述目标测点标识的节点;
目标索引块查找单元,用于查找所述内存中是否存在所述目标节点对应的目标索引块;若是,触发测点访问单元;
测点访问单元,用于在所述目标索引块中确定所述目标测点标识对应的测点地址,并依据该测点地址对测点进行访问;
节点位置调整单元,用于当所述预设周期结束时,利用所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,以使所述Treap树中各个节点的访问次数依据所述预设节点查找顺序依次降低。
上述装置,优选地,每个所述块信息包括的各自索引块的测点标识为各自索引块的最大测点标识及最小测点标识,
其中,所述目标节点查找单元包括:
查找子单元,用于依据所述节点查找顺序,在所述Treap树中,查找到所述目标测点标识在最大测点标识及最小测点标识范围内的目标节点。
上述装置,优选地,所述节点位置调整单元包括:
访问次数获取子单元,用于获得所述预设周期内目标节点增加后的访问次数,并获得该预设周期内所有节点的访问总次数;
访问优先级确定子单元,用于将所述增加后的访问次数与所述访问总次数的比值,确定为所述目标节点的访问优先级;
右旋子单元,用于当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为左子树时,对所述Treap树进行右旋;
左旋子单元,用于当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为右子树时,对所述Treap树进行左旋。
上述装置,优选地,还包括:
索引块置换单元,用于当所述内存中不存在所述目标节点对应的目标索引块时,将访问次数最低的索引块置换出内存,并将所述目标索引块读取至内存。
上述装置,优选地,每个所述索引块的容量相同且均未超过磁盘块容量,其中,所述索引块存储所述多个测点标识,包括:
所述索引块具有预设个数的分块,且非空分块中的测点标识依次排序;
或,
所述索引块具有预设个数的分块,首个空块中存储新增的测点标识。
与现有技术相比,本发明具有如下有益效果:
本发明实施例提供的集群数据库测点访问方法及装置,应用于在内存中预先建立的Treap树,Treap树节点存储访问次数,各个节点的访问次数依据预设节点查找顺序依次降低。该方法依据预设节点查找顺序,在Treap树中查找到目标节点,增加目标节点的访问次数,且当预设周期结束时,调整所述目标节点在Treap树中的节点位置,以使该Treap树中的各个节点的访问次数依据节点查找顺序依次降低。由此可见,本发明实施例能够实现依据用户对测点的访问次数对索引树进行调整,以使经常被访问的测点对应的节点位置更靠近根节点,由于节点查找顺序是从根节点开始的,因此,所述方法可缩短对应索引块的查找路径,进而查找到目标节点的速度更快,测点的访问效率更高。同时,索引Treap树是建立在内存中的,且内存中还存储有依据访问次数的高低排序从磁盘中读取的预设数量的索引块,首先在内存中查找目标节点对应的索引块,若存在,进而在查找的索引块中确定测点地址。与现有技术相比,本发明实施例可在内存直接确定出测点地址,减少了对磁盘的读写次数,因此,进一步了提高测点访问效率。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,其示出了集群数据库的一个架构示例图,如图所示,集群数据库包括多个单机数据库,每个单机数据库中管理有多个数据库测点,每个测点具有唯一标识,用户可以发送包含测点标识的访问请求,以实现对测点的访问。
需要说明的是,集群数据库向用户提供统一的测点访问接口,可选地,所述测点访问接口如图1所示的目录服务器,用户不需要关心测点具体在哪一单机数据库中,只需向目录服务器发送访问请求即可。当目录服务器节点到用户的访问请求后,依据所述访问请求中测点标识与测点地址间的映射关系,查找到访问请求中测点的具体地址,从而实现用户对该测点的透明访问。其中,访问接口维护有测点标识与测点地址之间的索引结构,以实现测点标识到测点物理存储位置的快速映射。
目前,数据库测点数量巨大,访问接口保存所有的测点索引,但由于内存容量的限制,无法将整个测点索引都放入内存中,因此,需要将部分测点索引放入磁盘中,每次选择一部分测点索引读取至内存,对访问请求中的测点标识进行查找。当测点标识并不在内存时,再从磁盘中将新的一部分测定索引读取至内存,同时将内存中的测点索引从内存调出至磁盘。
应用上述查找思想的一种现有技术是以B+树结构建立测点索引的,如图2所示,B+树的每个节点存储有一个多关键码的有序表,有序表中包含有多个依据大小进行排序的关键码,关键码代表测点索引数据子集,例如,关键码为5、10及20的节点,表示大于等于5小于10、大于等于10小于20、大于等于20小于下一节点中关键码28的三个索引数据子集,在所述各个索引子集中查找是否包含有所述测点标识。具体地,将所述B+树测点索引结构保存在磁盘上,当接收到测点标识时,读取B+树的一部分节点(可以是一个或多个节点)至内存,查找所述内存中是否包含有所述测点标识,当不包含有时,再选取一部分节点读取至内存进行新的查找。
但是,上述现有技术中,需要多次进行磁盘的读取,磁盘的访问速度相较于内存而言慢的多,测点的查找效率较低,本发明实施例提供一种集群数据库测点访问方法,以实现较高的测点查找效率。
参见图3,其示出了本发明实施例提供的一种集群数据库测点访问方法的流程,该方法应用于在内存中建立的Treap树,所述Treap树的每个节点存储预设索引块的块信息,每个所述索引块包含多个测点的标识及每个测点标识对应的测点地址,每个所述块信息包括各自索引块的测点标识范围及访问次数,各个节点的访问次数依据预设节点查找顺序依次降低,且所述内存中还存储有依据访问次数的高低排序读取的预设数量的索引块。
简单而言,本方法需要预先建立两级索引,其中第一级索引为Treap树,第二级索引为索引块。其中,所述第一级索引Treap树的每个节点对应一个索引块,每个索引块中包含多个测点标识与测点地址的键值对。需要说明的是,Treap树是一种平衡二叉树,Treap=Tree(树)+Heap(堆),其结合有平衡二叉树及堆两个方面的特性。在二叉树的基础上,每个Treap树节点还包含有访问次数节点域,该节点域用于记录在一个预设时间周期内该节点被访问的次数。该方法包括:
步骤101:在预设周期内,接收测点访问请求;其中,所述测点访问请求中包含目标测点标识。
其中,所述预设周期为时间段,周期的大小可以是根据访问接口接收到访问请求的频率设定,访问频率较高时,设定相对较短的时间段,访问频率较低时,设定相对较长的时间段。可选地,所述预设周期控制在20秒内,例如,相对较长的时间段选取20秒,相对应较短的时间段选取10秒。
步骤102:依据所述目标测点标识及所述节点查找顺序,在所述Treap树中,查找到目标节点,并增加所述目标节点在所述预设周期内的访问次数;其中,所述目标节点为测点标识范围内包含所述目标测点标识的节点。
其中,所述节点查找顺序为在Treap树中查找目标节点的顺序,Treap树是一种平衡二叉树,所述查找顺序为一种二分查找法。具体地,从根节点开始,先查找左子树,再查找右子树,当查找的节点不是目标节点,接着查找该节点的左子树,然后查找该节点的右子树,执行上述步骤,直至查找到叶子节点。需要说明的是,二分查找过程中需要将目标测点标识与节点存储块信息中的测点标识范围进行比较。当目标测点标识在该范围内时,该节点为目标节点,并且结束查找过程;当目标测点标识小于该范围的最小值时,则查找节点左子树,否则,查找节点右子树。
需要说明的是,预先建立的Treap树中,各个节点的访问次数依据预设节点查找顺序依次降低,也就是说,访问次数越高的节点越接近于根节点,因此,依据上述查找顺序查找节点时,访问次数越高的节点越早地被查找到。需要说明的是,访问次数指的是同一个预设周期内的访问次数。依据上述节点查找顺序,查找到目标节点后,增加目标节点的访问次数,具体地,将访问次数加1。
步骤103:查找所述内存中是否存在所述目标节点对应的目标索引块;若是,执行步骤104。
需要说明的是,在Treap树中查找到目标节点后,进而需要找到该目标节点对应的索引块。内存中预先存储预设数量的索引块,所述索引块为从磁盘读取的访问次数靠前的索引块。因此,首先在内存中,查找该目标节点对应的索引块。查找到后,执行后续步骤104。
步骤104:在所述目标索引块中确定所述目标测点标识对应的测点地址,并依据该测点地址对测点进行访问。
需要说明的是,上述步骤101至步骤104可以是多次重复执行的。也就是说,步骤101只要在一个预设周期内,接收到测点访问请求后,即可触发执行后续步骤102至步骤104的动作。
步骤105:当所述预设周期结束时,利用所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,以使所述Treap树中各个节点的访问次数依据所述预设节点查找顺序依次降低。
其中,步骤102增加了目标节点的访问次数,在预设周期结束时,需要对目标节点在Treap树中的节点位置进行调整,以使各个节点的访问次数依据节点查找顺序依次降低,也就是说,提高了目标访问节点被查找到的速度。
由以上的技术方案可知,本发明实施例提供的集群数据库测点访问方法,应用于在内存中预先建立的Treap树,Treap树节点存储访问次数,各个节点的访问次数依据预设节点查找顺序依次降低。该方法依据预设节点查找顺序,在Treap树中查找到目标节点,增加目标节点的访问次数,且当预设周期结束时,调整所述目标节点在Treap树中的节点位置,以使该Treap树中的各个节点的访问次数依据节点查找顺序依次降低。由此可见,本发明实施例能够实现依据用户对测点的访问次数对索引树进行调整,以使经常被访问的测点对应的节点位置更靠近根节点,由于节点查找顺序是从根节点开始的,因此,所述方法可缩短对应索引块的查找路径,进而查找到目标节点的速度更快,测点的访问效率更高。
同时,索引Treap树是建立在内存中的,且内存中还存储有依据访问次数的高低排序从磁盘中读取的预设数量的索引块,内存利用率较高。并且,首先在内存中查找目标节点对应的索引块,若存在,进而在查找的索引块中确定测点地址。与现有技术相比,本发明实施例可在内存直接确定出测点地址,减少了对磁盘的读写次数,因此,进一步了提高测点访问效率。
上述方法实施例中,Treap树节点存储的块信息中包括索引块的测点标识范围,可选地,所述测点标识范围为各自索引块对应的最大测点标识及最小测点标识。如图4所示,Treap树每个节点包括六个节点域,其中,MaxValue为索引块包含的测点标识中的最大值;MinValue为索引块包含的测点标识中的最小值;Pri为节点的访问次数(或者认为是节点对应的索引块的访问次数);IndexPtr为索引块的存储位置,用以表明节点对应的索引块是否在内存中,当该索引块在内存中时,该节点域的值为内存位置指针,否则,该节点域的值为空;LPtr为该节点的左子树;RPtr为该节点的右子树。
与现有技术相比,Treap树节点中只存储索引块中的最大测点标识及最小测点标识,用两个标识即可表明节点对应索引块包含的测点标识范围,简化了索引树的节点结构,降低了单个节点的内存占用量,提高了内存的利用率。
其中,上述方法实施例中依据所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,可以通过下述方式实现:
依据所述节点查找顺序,在所述Treap树中,查找到所述目标测点标识在最大测点标识及最小测点标识范围内的目标节点。
如图4所示,假设用户发送的测点访问请求中包含的目标测点标识为555,根节点的右子树第一个节点对应的索引块为索引块3,索引块3预设的存储容量为200,即可存储的测点标识包400-599,因此,该节点存储的最小测点标识为400,最大测点标识为599。依据节点查找顺序,在Treap树中,从根节点开始,首先查找左子树的第一个节点,再查找右子树的第一个节点,当查找到目标测点标识555包含在400至599范围内,进而,确定该节点为目标节点。
可选的,上述方法实施例中依据所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,可以通过下述方式实现:
获得所述预设周期内目标节点增加后的访问次数,并获得该预设周期内所有节点的访问总次数;将所述增加后的访问次数与所述访问总次数的比值,确定为所述目标节点的访问优先级;当所述目标节点的访问优先级高于该目标节点父节点的优先级且所述目标节点为左子树时,对所述Treap树进行右旋;当所述目标节点的访问优先级高于该目标节点父节点的优先级且所述目标节点为右子树时,对所述Treap树进行左旋。
需要说明的是,每个节点的节点域中包含访问次数节点域,该节点域中的值可以表示一个预设周期内的访问次数,也可以表示系统自运行开始后的总时长内节点的访问次数。
若节点域中的值为第二种形式时,则需要在每一轮的周期内,维持一个全局值,即系统当前周期数,系统当前周期数为系统运行时长与预设周期之间的比值。相应地,每个节点存储的块信息中包含有一个节点域,即当前周期数。当依据用户的访问请求查找到目标节点时,增加目标节点的访问次数前,需要首先判断该节点的当前周期数是否与系统当前周期数相同,若是,则将该节点的访问次数直接加1,否则,用所述系统的当前周期数更新该节点的当前周期数,然后再将该节点的访问次数加1。
同时,系统需维持另一全局值,即系统访问次数,用以表示一个预设周期内所有节点的访问次数,也就是用户发送的测点访问请求的总数。当预设周期结束时,获取系统访问次数的值,该值作为该预设周期内所有节点的访问总次数,同时,将访问到的目标节点的访问次数与所述访问总次数的比值确定为各个目标节点的访问优先级,同时,也是索引块驻留在内存的优先级。
对目标节点位置的调整需要依据目标节点的访问优先级,因此,判断目标节点的访问优先级与其父节点的访问优先级的大小关系,且需要判断该目标节点为父节点的左子树还是右子树,从而决定对目标节点进行左旋还是右旋。
需要说明的是,对目标节点的调整,为了使Treap树同时满足平衡二叉树及最小堆的性质,也就是说,以使所述Treap树中各个节点的访问次数依据所述预设节点查找顺序依次降低。调整的方式包括左旋及右旋,其中:
左旋:左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子节点成为子树的根。
右旋:右旋一个子树,会把它的根节点旋转到根的右子树位置,同时根节点的左子节点成为子树的根。
如图5所示,其示出了两颗Treap树的模型,其中,圆圈表示Treap树的节点,圆圈外的数值表明该节点的优先级。从左边的Treap树转向右边的Treap树为右旋,从右边的Treap转向左边的Treap为左旋。旋转具有如下性质:
性质1:左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子节点成为子树的根;右旋一个子树,会把它的根节点旋转到根的右子树位置,同时根节点的左子节点成为子树的根。
性质2:对子树旋转后,子树仍然满足平衡二叉树性质。
旋转可以使不满足堆序的两个节点通过调整位置,重新满足堆序,而不改变平衡二叉树性质。
可选地,参见图6,其示出了本发明实施例提供的集群数据库测点访问方法又一实施例的流程,在上述方法实施例一的基础上还包括:
步骤106:当所述内存中不存在所述目标节点对应的目标索引块时,将访问次数最低的索引块置换出内存,并将所述目标索引块读取至内存。
需要说明的是,内存中存储的是依据同一周期内访问次数靠前的节点对应的索引块,该访问次数可体现用户的访问兴趣。当步骤103的判断结果为否时,将访问次数最低的索引块置换出内存,并将目标索引块从磁盘读取至内存,且触发步骤104的执行,从而实现对测点的访问。
由以上的技术方案可知,该访问方法可以基于用户的访问兴趣管理内存中缓存的索引块,将每次一段时间内被访问次数最少的索引块置换出内存,从而在内存中查找目标索引块的命中几率较大,可提高测点的访问效率。
需要说明的是,上述各个方法实施例中,每个索引块的容量是相同的,即每个索引块可存储的测点标识与测点地址的键值对的数量是相同的,并且,每个索引块的容量未超过磁盘的块容量,以保证通过Treap树查找到目标节点后,且该目标节点并未在内存中时,可通过对磁盘的一次读取完成索引块到内存的装载,因此,有效减少磁盘的读写次数。
每个索引块中存储有多个测点标识,具体地,存储的方式可以通过以下两种方式中的任意一种实现:所述索引块具有预设个数的分块,且非空分块中的测点标识依次排序;或,所述索引块具有预设个数的分块,首个空块中存储新增的测点标识。具体地,
第一种实现方式中,索引块由块控制信息和n个键值对(即测点标识--存储地址)组成。其中控制信息的大小固定,表明本索引块包含的键值对个数n。所有的二级索引块可放入到一个较大的文件中,只有需要时才将对应的索引块调入到内存。每个索引块的空间按其预设容量(键值对个数n)预先分配,而每个新加入的键值对会插入到本索引块中为自己预留的位置。这样索引块中的键值对依据测点标识有序排列。
第二种实现方式中,索引块块首的块控制信息中保存了本索引块最大容量n、当前包含的键值对个数N及首个预留的空位置FirstArea。每个索引块的空间按其预订最大容量n预先分配。与第一种实现方式的关键不同点是,每个新加入的键值对无需按测点标识排列,只需插入到本索引块中FirstArea指示的空位置,即随机插入无需排序。需要说明的是,这样索引块中的键值对并不是有序排列的,为了提高在索引块中查找键值对的速度,在索引块调入内存过程中,对该索引块中的测点标识排序。
可选地,当集群数据库中增加新的测点标识时,系统会为其分配测点标识,并将其依据测点标识的大小,需要将其对应的键值对存入索引块中,若索引块已经存在,将该键值对直接存入索引块,若索引块不存在,创建新的索引块,并在Treap树中创建对应节点,因此,需要在Treap树中插入节点元素。
在Treap树中插入节点元素,与在平衡二叉树中插入方法相似。首先找到合适的插入位置,然后建立新的节点元素,存储节点元素。但是要注意建立新的节点的过程中,新节点的访问次数可能会破坏堆序,因此要根据需要进行恰当的旋转。具体方法如下:
1.)从根节点开始插入;
2.)如果要插入的值小于等于当前节点的值,在当前节点的左子树中插入,插入后如果左子节点的访问次数高于当前节点的访问次数,对当前节点进行右旋;
3.)如果要插入的值大于当前节点的值,在当前节点的右子树中插入,插入后如果右子节点的访问次数高于当前节点的访问次数,对当前节点进行左旋;
4.)如果当前节点为空节点,在此建立新的节点,该节点的值为要插入的值。
另外,集群数据库集中删除一批测点,若这些测点被包含于同一索引块中,该索引块会被删除,Treap树中存储该索引块块信息的节点也将被删除,以提高空间的利用率。首先,在Treap树中查找到待删除的节点,然后依据下述不同情况分别进行相应处理。
情况一:该节点为叶节点或链节点,则该节点是可以直接删除的节点。若该节点有非空子节点,用非空子节点代替该节点的,否则用空节点代替该节点,然后删除该节点。
情况二:该节点有两个非空子节点,通过旋转,使该节点变为可以直接删除的节点。如果该节点的左子节点的访问次数高于右子节点的访问次数,右旋该节点,使该节点降为右子树的根节点,然后访问右子树的根节点,继续访问;反之,左旋该节点,使该节点降为左子树的根节点,然后访问左子树的根节点,继续访问,直至该节点变成可以直接删除的节点。
下面对本发明实施例提供的集群数据库测点访问装置进行介绍,需要说明的是,下文描述的集群数据库测点访问装置可参照上文描述的集群数据库测点访问方法,此处不做赘述。
图7为本发明实施例提供的集群数据库测点访问装置的结构示意图,该装置应用于在内存中建立的Treap树,所述Treap树的每个节点存储预设索引块的块信息,每个所述索引块包含多个测点的标识及每个测点标识对应的测点地址,每个所述块信息包括各自索引块的测点标识范围及访问次数,各个节点的访问次数依据预设节点查找顺序依次降低,且所述内存中还存储有依据访问次数的高低排序读取的预设数量的索引块,该装置具体包括:
访问请求接收单元201,用于在预设周期内,接收测点访问请求;其中,所述测点访问请求中包含目标测点标识;
目标节点查找单元202,用于依据所述目标测点标识及所述节点查找顺序,在所述Treap树中,查找到目标节点;
访问次数增加单元203,用于增加所述目标节点在所述预设周期内的访问次数;其中,所述目标节点为测点标识范围内包含所述目标测点标识的节点;
目标索引块查找单元204,用于查找所述内存中是否存在所述目标节点对应的目标索引块;若是,触发测点访问单元205;
测点访问单元205,用于在所述目标索引块中确定所述目标测点标识对应的测点地址,并依据该测点地址对测点进行访问;
节点位置调整单元206,用于当所述预设周期结束时,利用所述增加后的访问次数,调整所述目标节点在所述Treap树中的节点位置,以使所述Treap树中各个节点的访问次数依据所述预设节点查找顺序依次降低。
由以上技术方案可知,本发明实施例提供的集群数据库测点访问装置,应用于在内存中预先建立的Treap树,Treap树节点存储访问次数,各个节点的访问次数依据预设节点查找顺序依次降低。该方法依据预设节点查找顺序,在Treap树中查找到目标节点,增加目标节点的访问次数,且当预设周期结束时,调整所述目标节点在Treap树中的节点位置,以使该Treap树中的各个节点的访问次数依据节点查找顺序依次降低。由此可见,本发明实施例能够实现依据用户对测点的访问次数对索引树进行调整,以使经常被访问的测点对应的节点位置更靠近根节点,由于节点查找顺序是从根节点开始的,因此,所述方法可缩短对应索引块的查找路径,进而查找到目标节点的速度更快,测点的访问效率更高。
同时,索引Treap树是建立在内存中的,且内存中还存储有依据访问次数的高低排序从磁盘中读取的预设数量的索引块,内存利用率较高。并且,首先在内存中查找目标节点对应的索引块,若存在,进而在查找的索引块中确定测点地址。与现有技术相比,本发明实施例可在内存直接确定出测点地址,减少了对磁盘的读写次数,因此,进一步了提高测点访问效率。
上述装置实施例应用的Treap树中每个节点存储索引块的块信息,每个所述块信息中包含各自索引块的测点标识范围,可选地,块信息中的测点标识为各自索引块的最大测点标识及最小测点标识。相应地,所述目标节点查找单元包括:
查找子单元,用于依据所述节点查找顺序,在所述Treap树中,查找到所述目标测点标识在最大测点标识及最小测点标识范围内的目标节点。
节点位置调整单元用于调整目标节点在所述Treap树中的节点位置,参见图8,该单元可以具体包括以下子单元:
访问次数获取子单元301,用于获得所述预设周期内目标节点增加后的访问次数,并获得该预设周期内所有节点的访问总次数;
访问优先级确定子单元302,用于将所述增加后的访问次数与所述访问总次数的比值,确定为所述目标节点的访问优先级;
右旋子单元303,用于当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为左子树时,对所述Treap树进行右旋;
左旋子单元304,用于当所述目标节点的访问优先级高于该目标节点父节点的访问优先级且所述目标节点为右子树时,对所述Treap树进行左旋。
图9为本发明实施例提供的集群数据库测点访问装置的又一结构示意图,在图7所示的结构基础之上,还可以包括:
索引块置换单元207,用于当所述内存中不存在所述目标节点对应的目标索引块时,将访问次数最低的索引块置换出内存,并将所述目标索引块读取至内存。
需要说明的是,该索引块置换单元207分别与目标索引块查找单元204及测点访问单元205相连,也就是说,当目标索引块查找单元204并未在内存中查找到目标索引块时,触发索引块置换单元207将访问次数最低的索引块置换出内存,并将所述目标索引块从磁盘读取至内存,并触发测点访问单元205对测点进行访问。
可选的,上述各个装置实施例中,索引块的实现方式可以有两种,即每个所述索引块的容量相同且均未超过磁盘块容量,其中,所述索引块存储所述多个测点标识,包括:
所述索引块具有预设个数的分块,且非空分块中的测点标识依次排序;
或,
所述索引块具有预设个数的分块,首个空块中存储新增的测点标识。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。