CN107943519B - 一种时序数据乱序操作处理方法和装置 - Google Patents
一种时序数据乱序操作处理方法和装置 Download PDFInfo
- Publication number
- CN107943519B CN107943519B CN201711322396.1A CN201711322396A CN107943519B CN 107943519 B CN107943519 B CN 107943519B CN 201711322396 A CN201711322396 A CN 201711322396A CN 107943519 B CN107943519 B CN 107943519B
- Authority
- CN
- China
- Prior art keywords
- root
- new
- node
- update
- order
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 22
- 238000000034 method Methods 0.000 claims abstract description 16
- 230000009471 action Effects 0.000 claims description 23
- 238000004891 communication Methods 0.000 claims description 8
- 238000003780 insertion Methods 0.000 claims description 7
- 230000037431 insertion Effects 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 6
- 230000006399 behavior Effects 0.000 claims description 3
- 230000000630 rising effect Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000001052 transient effect Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000035800 maturation Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
Abstract
本发明提供一种时序数据乱序操作处理方法和装置,所述方法针对三种时序数据乱序操作,INSERT(t,v)操作:在时间点t插入新值v;UPDATE(t1,t2,v)操作:将时间段[t1,t2]更新为新值v;DELETE(t)操作:将时间点t之前的数据删除,定义了存储这三种操作的二叉搜索树的结构,该二叉树的每个节点表征一个时间区间段操作,所有节点的fix值满足小根堆性质,所有节点所存储的开始时间、结束时间满足二叉搜索树性质。每当一个新的乱序操作到来时,通过判断该操作与二叉搜索树根节点的交叉关系来对该操作与该二叉搜索树进行相应的修改,最终使得该二叉搜索树能够存储下该操作并能快速对数据进行查询。
Description
技术领域
本发明涉及数据存储技术领域,更具体地,涉及一种时序数据乱序操作处理方法和装置。
背景技术
伴随着云计算、互联网、物联网等现代技术的不断发展和成熟,时间序列数据(简称时序数据)在工业界及人们的日常生活中占据了很大的比重。时序数据是按时间戳排列形成的有序数据,比如一段时间内的环境温度、股票价格、机器的内存使用率等等。其通常具有写入速度快(写入需求大于读取需求)、写入容量大、近期数据关注度高等特点。
在工业实际场景中,数据采集端的数据会传送至机器的解码处理程序,再被写入数据库。在这个过程中,若采集端使用UDP协议传送数据,则因网络延迟可能导致数据写入数据库的顺序与数据产生的顺序不一致。此外,传感器在一段时间内可能由于移动网络信号等原因,设备数据在一段时间内未上传,这之后再被用户将这部分数据写入到数据库中。设备的传感器还可能因为故障等原因产生了错误数据。最后,为了节省空间等目的,一段时间后数据还可能被删除。当一个时间序列数据存在上述操作时,我们称该时间序列为乱序时间序列。
上述实际场景涉及的操作可以被定义为时序数据的乱序操作:假设当前已存储时序数据的最大时间戳为T,则对所有小于T的时间点的操作为乱序操作,具体可分为以下三种:
1)INSERT(t,v)操作:在时间点t(t≤T)插入新值v。
2)UPDATE(t1,t2,v)操作:将时间段[t1,t2](t1≤t2≤T)内已存在的数据值更新为新值v。
3)DELETE(t)操作:将时间点t(t≤T)之前的数据删除。
在多数数据存储系统中尤其是NoSQL存储系统中,乱序操作会明显降低时序数据库的写入及查询性能。如何高效的对乱序操作进行存取是提升乱序数据写入、查询性能的关键。
发明内容
本发明提供一种克服上述问题或者至少部分地解决上述问题的一种时序数据乱序操作处理方法和装置,解决了现有技术中对时序数据乱序操作的写入、查询性能低的问题。
根据本发明的一个方面,提供一种时序数据乱序操作处理方法,包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则令ROOT.v=TP.v,其中,若ROOT.op为插入INSERT且TP.op为更新UPDATE,则令ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op为删除DELETE时,TP.op为更新UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
作为优选的,若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;具体包括:
所述乱序操作写入根节点时,所述根节点随机生成一个fix值;
若所述乱序操作为插入INSERT,在时间点t插入新值v,则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=v,ROOT.op=INSERT,ROOT.fix=fix,ROOT.left=ROOT.right=NULL;
若所述乱序操作为更新UPDATE,将时间段[s,e]内已存在的数据值更新为新值v,则在所述ROOT中存储:ROOT.s=s,ROOT.e=e,ROOT.v=v,ROOT.op=UPDATE,ROOT.fix=fix,ROOT.left=ROOT.right=NULL;
若所述乱序操作为删除DELETE,将时间点t之前的数据删除,则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=NULL,ROOT.op=DELETE,ROOT.fix=fix,ROOT.left=NULL,ROOT.right=NULL;
其中,ROOT.v为所述根节点存储的时间段的值,所述ROOT.left为所述根节点的左孩子节点,所述ROOT.right为所述根节点的右孩子节点,NULL表示空。
作为优选的,还包括若判断获知所述ROOT不为空,且TP.s=ROOT.s,TP.e=ROOT.e,ROOT.op=DELETE,TP.op=UPDATE;则进行存储判决:
判断乱序操作集合INSERT_LIST是否为空,若不为空,则遍历INSERT_LIST中存储的操作I,并更新TP=I,将更新后的TP存储至所述根列表;若为空,则判断当前乱序操作序列已存储至二叉树中。
作为优选的,还包括:
若TP.e<ROOT.s,则更新ROOT=ROOT.left,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中。
作为优选的,还包括:
若ROOT.e<TP.s,则更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中。
作为优选的,还包括:
若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=INSERT,TP.op=UPDATE,则新建乱序操作TPnew,使得TPnew.s=ROOT.s,TPnew.e=ROOT.e,TPnew.v=TP.v,TPnew.op=INSERT,将TPnew所述加入到乱序操作集合INSERT_LIST;
若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=DELETE,TP.op=UPDATE,则执行TP.s=ROOT.e+1,否则删除当前ROOT节点。
作为优选的,还包括:
若ROOT.s>TP.s,则执行ROOT.s=TP.e+1,更新ROOT=ROOT.left,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中。
作为优选的,还包括:
当ROOT.s≤TP.s,ROOT.e>TP.e:判断是否为ROOT.op=DELETE,且TP.op=UPDATE,若是则执行存储判决,若否则执行ROOT.s=TP.e+1,将所述乱序操作插入到二叉树中;
当ROOT.s<TP.s,ROOT.e≥TP.e:判断是否为ROOT.op=DELETE,且TP.op=UPDATE,若是则执行存储判决,若否则执行ROOT.s=TP.e-1,将所述乱序操作插入到二叉树中;
当ROOT.s<TP.s,ROOT.e>TP.e:判断是否为ROOT.op=DELETE,且TP.op=UPDATE,若是则执行存储判决,若否则依次执行tmp=ROOT.e,ROOT.e=TP.s-1,将所述乱序操作插入到二叉树中,新建乱序操作TPnew,使得TPnew.s=TP.e+1,TPnew.e=tmp,TPnew.v=ROOT.v,TPnew.op=ROOT>op,将TPnew插入到二叉树中。
作为优选的,还包括:
当TP.s<ROOT.e<TP.e,则根据所述乱序操作的操作类型与所述根节点存储的操作类型,对所述乱序操作进行存储:
判断是否为ROOT.op=DELETE,TP.op=UPDATE,若是,则新建乱序操作TPnew,使得TPnew.s=ROOT.e+1,TPnew.e=TP.e,TPnew.v=TP.v,TPnew.op=TP.op,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中;若否则执行步骤ROOT.e=TP.s-1,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中。
一种乱序操作处理设备,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至9任一所述的方法。
本发明提出一种时序数据乱序操作处理方法和装置,针对三种时序数据乱序操作,INSERT(t,v)操作:在时间点t插入新值v;UPDATE(t1,t2,v)操作:将时间段[t1,t2]更新为新值v;DELETE(t)操作:将时间点t之前的数据删除,定义了存储这三种操作的二叉搜索树的结构,该二叉树的每个节点表征一个时间区间段操作(开始时间、结束时间、值、操作类型、随机值fix、左孩子节点、右孩子节点),所有节点的fix值满足小根堆性质,所有节点所存储的开始时间、结束时间满足二叉搜索树性质。每当一个新的乱序操作到来时,通过判断该操作与二叉搜索树根节点的交叉关系来对该操作与该二叉搜索树进行相应的修改,最终使得该二叉搜索树能够存储下该操作并能快速对数据进行查询,通过使用该发明中的二叉搜索树结构存储乱序数据操作,可以对乱序时序数据操作进行快速的记录,在查询时可以提供比较高的查询速率。
附图说明
图1为根据本发明实施例的时序数据乱序操作处理方法示意图;
图2为根据本发明实施例的乱序操作到达后二叉树的处理示意图;
图3为根据本发明实施例的查询时间范围结果示意图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
如图1所示,图中示出了一种时序数据乱序操作处理方法,包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则执行ROOT.v=TP.v,其中,若ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op=DELETE时,TP.op=UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
具体的,在本实施例中,记数据库中时序数据中时间戳最大的数据点的时间戳为最新时刻T,本发明是针对t小于T时的处理情景,定义在该时序数据上的三种乱序操作为INSERT(t,v)、DELETE(t)、UPDATE(s,e,v);其中:
INSERT(t,v)表示在时间戳t(t≤T)插入新值v,不论原先数据在t时刻是否有值;
UPDATE(s,e,v)表示将起始时间戳为s,结束时间戳为e的时间段内的所有已存在的数据点的值更新为v,其中s≤e≤T;
DELETE(t)表示将时间戳在t(t≤T)之前的所有数据删除。
用随机二叉搜索树存储时序数据乱序操作,记该二叉搜索树为TREE,定义TREE的根节点为ROOT,TREE的每个节点存储以下七个变量:
s,时间戳类型,表示该节点所存储时间段的起始时间;
e,时间戳类型,表示该节点所存储时间段的结束时间;
v,表示该节点所存储时间段的值;
op,表示该节点所存储时间段的乱序操作类型,为INSERT、UPDATE、DELETE三种之一;
fix,一个64位长整型值,该值是在每个节点创建时随机产生的,TREE的所有节点的fix值要满足小根堆的性质,即每个节点的孩子节点的fix值都必须大于等于其父亲节点的fix值;
left,存储当前节点的左孩子节点,默认为空;
right,存储当前节点的右孩子节点,默认为空。
本发明实施例中用符号“.”表示树节点变量的引用,比如“ROOT.s”表示节点ROOT的s变量,“X.left”表示节点X的左孩子节点。
对于INSERT操作,s=e,节点只存储一个时间戳,op=INSERT,v不为空;对于UPDATE操作,s≤e,op=UPDATE,v不为空;对于DELETE操作,s=0,op=DELETE且v为空。对于Tree存储的每一个节点N来说,若N.left不为空,则必须满足N.left<N.s;若N.right不为空,则必须满足N.right>N.e。
对应于附图2,该图中为一棵二叉搜索树接收乱序操作INSERT(40,v4)后的节点分裂与旋转示意图,其中橙色部分表示该节点存储的是插入操作,蓝色部分表示该节点存储的是删除操作,红色部分表示该节点存储的是更新操作。由上述可知,每个节点都显示表示了s,e,v,op,fix这五个变量,left与right变量通过黑色实线表征。所有节点的fix值满足了小根堆性质,所有节点的s,e值满足了二叉搜索树性质。
在本实施例中,时序数据乱序操作处理方法具体包括:
步骤1、初始化时,TREE的ROOT节点为空;
步骤2、系统接收到用户的一个乱序操作TP,记TP包含以下四个变量:
s,时间戳类型,表征该操作的起始时间戳;
e,时间戳类型,表征该操作的结束时间戳;
v,该乱序操作的值;
op,表征该操作的类型,为INSERT、UPDATE及DELETE三种之一。
本发明实施例中用符号“.”表示乱序操作的变量引用,比如“TP.s”表示乱序操作TP的s变量,“TP.v”表示节点乱序操作TP的操作值。
若此时ROOT为空,则跳转到步骤3;若ROOT不为空,则跳转到步骤4。
步骤3、根据上述可知,ROOT节点会随机生成一个fix值;
若所述乱序操作为插入INSERT(t,v),则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=v,ROOT.op=INSERT,ROOT.fix=fix,ROOT.left=ROOT.right=NULL;
若所述乱序操作为更新UPDATE(t,v),则在所述ROOT中存储:ROOT.s=s,ROOT.e=e,ROOT.v=v,ROOT.op=UPDATE,ROOT.fix=fix,ROOT.left=ROOT.right=NULL;
若所述乱序操作为删除DELETE(t),则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=NULL,ROOT.op=DELETE,ROOT.fix=fix,ROOT.left=NULL,ROOT.right=NULL;
其中,ROOT.v为所述根节点存储的时间段的值,所述ROOT.left为所述根节点的左孩子节点,所述ROOT.right为所述根节点的右孩子节点,NULL表示空。在本步骤中,TREE只有ROOT一个节点。
步骤4、判断TP.s,TP.e与ROOT.s,ROOT.e的交叉关系,并根据不同的交叉关系做不同的处理;
4.1、若TP.e<ROOT.s,则更新ROOT=ROOT.left,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中,跳转步骤1继续执行。
4.2、若ROOT.e<TP.s,则更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中,跳转步骤1继续执行。
4.3、具体的在本实施例中,当ROOT.s≤TP.s且ROOT.e≥TP.e,则交叉关系为ROOT覆盖TP或ROOT完全重合于TP,包括:
若TP.s=ROOT.s,且TP.e=ROOT.e,则跳转4.3.1执行;若TP.s=ROOT.s则跳转至4.3.2继续执行;若TP.e=ROOT.e则跳转至4.3.3继续执行;否则跳转至4.3.4继续执行。
4.3.1、若满足第一预设条件,则执行ROOT.v=TP.v,其中,若ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op=DELETE时,TP.op=UPDATE。
若TP.s=ROOT.s,TP.e=ROOT.e,ROOT.op=DELETE,TP.op=UPDATE;则进行存储判决:
判断乱序操作集合INSERT_LIST是否为空,若不为空,则遍历INSERT_LIST中存储的操作I,并更新TP=I,将更新后的TP存储至所述根列表;若为空,则判断当前乱序操作序列已存储至二叉树中。
具体的,ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT=TP.v,跳转步骤1;若ROOT.op=DELETE且TP.op=UPDATE,则执行存储判决步骤;若不满足上述两个条件,则执行ROOT.op=TP.op,ROOT.v=TP.v。
4.3.2、若ROOT.op=DELETE且TP.op=UPDATE,则跳转则执行存储判决步骤;否则执行ROOT.s=TP.e+1,将TP操作插入到TREE中,并跳转则执行存储判决步骤。
4.3.3、若ROOT.op=DELETE且TP.op=UPDATE,则跳转则执行存储判决步骤;否则执行ROOT.e=TP.s-1,将TP操作插入到TREE中,并跳转则执行存储判决步骤。
4.3.4、若ROOT.op=DELETE且TP.op=UPDATE,则跳转则执行存储判决步骤;否则依次执行tmp=ROOT.e,ROOT.e=TP.s-1,将所述乱序操作插入到二叉树中,新建乱序操作TPnew,使得TPnew.s=TP.e+1,TPnew.e=tmp,TPnew.v=ROOT.v,TPnew.op=ROOT>op,将TPnew插入到二叉树中。
4.4、若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=INSERT,TP.op=UPDATE,则新建乱序操作TPnew,使得TPnew.s=ROOT.s,TPnew.e=ROOT.e,TPnew.v=TP.v,TPnew.op=INSERT,将TPnew所述加入到乱序操作集合INSERT_LIST;
若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=DELETE,TP.op=UPDATE,则执行TP.s=ROOT.e+1,否则删除当前ROOT节点,跳转到步骤1继续执行。
4.5、若ROOT.s>TP.s,则执行ROOT.s=TP.e+1,更新ROOT=ROOT.left,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中,跳转到步骤1继续执行。
4.6、当TP.s<ROOT.e<TP.e,则根据所述乱序操作的操作类型与所述根节点存储的操作类型,对所述乱序操作进行存储:
判断是否为ROOT.op=DELETE,TP.op=UPDATE,若是,则新建乱序操作TPnew,使得TPnew.s=ROOT.e+1,TPnew.e=TP.e,TPnew.v=TP.v,TPnew.op=TP.op,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中;若否则执行步骤ROOT.e=TP.s-1,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中。
如图2和图3所示,原TREE已存储了三个操作,UPDATE(35,60,v1)、DELETE(30)与INSERT(100,v2),当新来一个乱序操作INSERT(40,v4)时,通过判断该乱序操作与根节点的关系,交叉关系满足步骤(5-3)所示,本发明会将根节点进行分裂为(35,39)与(41,60)两段并插入新段(40,40),插入新节点时会为该节点随机生成一个fix值,如图中所示该节点的fix值等于80,所以该节点最终会位于根位置,同时剩余的节点会根据fix值及s,e值进行相应的旋转操作。
本实施例中还示出了一种时序数据乱序操作处理装置,包括:处理器(processor)、存储器(memory)、通信接口(Communications Interface)和总线;
其中,
所述处理器、存储器、通信接口通过所述总线完成相互间的通信;
所述通信接口用于该测试设备与显示装置的通信设备之间的信息传输;
所述处理器用于调用所述存储器中的程序指令,以执行上述各方法实施例所提供的时序数据乱序操作处理方法,例如包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则执行ROOT.v=TP.v,其中,若ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op=DELETE时,TP.op=UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
本实施例还公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的时序数据乱序操作处理方法,例如包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则执行ROOT.v=TP.v,其中,若ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op=DELETE时,TP.op=UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的时序数据乱序操作处理方法,例如包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则执行ROOT.v=TP.v,其中,若ROOT.op=INSERT且TP.op=UPDATE,则执行ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足ROOT.op=DELETE时,TP.op=UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的显示装置的测试设备等实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后,本发明的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种时序数据乱序操作处理方法,其特征在于,包括:
获取乱序操作TP的操作类型op、起始时间戳s、结束时间戳e、乱序操作值v,同时获取二叉树的根节点ROOT状态;
若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;
若判断获知所述ROOT不为空,且满足第一预设条件,则令ROOT.v=TP.v,其中,若ROOT.op为插入INSERT且TP.op为更新UPDATE,则令ROOT.op=TP.op,ROOT.v=TP.v;
所述第一预设条件为:TP.s=ROOT.s,TP.e=ROOT.e,且不满足R OOT.op为删除DELETE时,TP.op为更新UPDATE;
所述ROOT.op为所述根节点存储的操作类型,所述ROOT.s为所述根节点存储的起始时间戳,ROOT.e为所述根节点存储的结束时间戳;TP.op为所述乱序操作的操作类型;所述TP.s为所述乱序操作的起始时间戳,TP.e为所述乱序操作的结束时间戳。
2.根据权利要求1所述的时序数据乱序操作处理方法,其特征在于,若判断获知所述根节点ROOT为空,则在所述ROOT中存储所述op、s、e、v;具体包括:
所述乱序操作写入根节点时,所述根节点随机生成一个fix值;
若所述乱序操作为插入INSERT,在时间点t插入新值v,则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=v,ROOT.op=INSERT,ROOT.fix=fix,ROOT.left=ROOT.right=NULL;
若所述乱序操作为更新UPDATE,将时间段[s,e]内已存在的数据值更新为新值v,则在所述ROOT中存储:ROOT.s=s,ROOT.e=e,ROOT.v=v,ROOT.op=UPDATE,ROOT.fix=fix,ROOT.left=ROOT.rig ht=NULL;
若所述乱序操作为删除DELETE,将时间点t之前的数据删除,则在所述ROOT中存储:ROOT.s=ROOT.e=t,ROOT.v=NULL,ROOT.o p=DELETE,ROOT.fix=fix,ROOT.left=NULL,ROOT.right=NULL;
其中,ROOT.v为所述根节点存储的时间段的值,所述ROOT.left为所述根节点的左孩子节点,所述ROOT.right为所述根节点的右孩子节点,NULL表示空。
3.根据权利要求2所述的时序数据乱序操作处理方法,其特征在于,还包括若判断获知所述ROOT不为空,且TP.s=ROOT.s,TP.e=R OOT.e,ROOT.op=DELETE,TP.op=UPDATE;则进行存储判决:
判断乱序操作集合INSERT_LIST是否为空,若不为空,则遍历I NSERT_LIST中存储的操作I,并更新TP=I,将更新后的TP存储至根列表;若为空,则判断当前乱序操作序列已存储至二叉树中。
4.根据权利要求2所述的时序数据乱序操作处理方法,其特征在于,还包括:
若TP.e<ROOT.s,则更新ROOT=ROOT.left,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中。
5.根据权利要求2所述的时序数据乱序操作处理方法,其特征在于,还包括:
若ROOT.e<TP.s,则更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中。
6.根据权利要求3所述的时序数据乱序操作处理方法,其特征在于,还包括:
若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=INSERT,TP.op=UPDATE,则新建乱序操作TPnew,使得TPnew.s=ROOT.s,TPnew.e=RO OT.e,TPnew.v=TP.v,TPnew.op=INSERT,将TPnew加入到乱序操作集合INSERT_LIST;
若ROOT.s≤TP.s,ROOT.e≥TP.e,且ROOT.op=DELETE,TP.op=UPDATE,则执行TP.s=ROOT.e+1,否则删除当前ROOT节点。
7.根据权利要求3所述的时序数据乱序操作处理方法,其特征在于,还包括:
若ROOT.s>TP.s,则执行ROOT.s=TP.e+1,更新ROOT=ROOT.le ft,将所述左孩子节点作为新的根节点,将所述乱序操作存入所述左孩子节点中。
8.根据权利要求3所述的时序数据乱序操作处理方法,其特征在于,还包括:
当ROOT.s≤TP.s,ROOT.e>TP.e:判断是否为ROOT.op=DELET E,且TP.op=UPDATE,若是则执行存储判决,若否则执行ROOT.s=T P.e+1,将所述乱序操作插入到二叉树中;
当ROOT.s<TP.s,ROOT.e≥TP.e:判断是否为ROOT.op=DELET E,且TP.op=UPDATE,若是则执行存储判决,若否则执行ROOT.s=T P.e-1,将所述乱序操作插入到二叉树中;
当ROOT.s<TP.s,ROOT.e>TP.e:判断是否为ROOT.op=DELET E,且TP.op=UPDATE,若是则执行存储判决,若否则依次执行tmp=R OOT.e,ROOT.e=TP.s-1,将所述乱序操作插入到二叉树中,新建乱序操作TPnew,使得TPnew.s=TP.e+1,TPnew.e=tmp,TPnew.v=ROOT.v,TPnew.op=ROOT>op,将TPnew插入到二叉树中。
9.根据权利要求3所述的时序数据乱序操作处理方法,其特征在于,还包括:
当TP.s<ROOT.e<TP.e,则根据所述乱序操作的操作类型与所述根节点存储的操作类型,对所述乱序操作进行存储:
判断是否为ROOT.op=DELETE,TP.op=UPDATE,若是,则新建乱序操作TPnew,使得TPnew.s=ROOT.e+1,TPnew.e=TP.e,TPnew.v=TP.v,TPnew.op=TP.op,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中;若否则执行步骤RO OT.e=TP.s-1,更新ROOT=ROOT.right,将所述右孩子节点作为新的根节点,将所述乱序操作存入所述右孩子节点中。
10.一种时序数据乱序操作处理设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至9任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711322396.1A CN107943519B (zh) | 2017-12-12 | 2017-12-12 | 一种时序数据乱序操作处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711322396.1A CN107943519B (zh) | 2017-12-12 | 2017-12-12 | 一种时序数据乱序操作处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107943519A CN107943519A (zh) | 2018-04-20 |
CN107943519B true CN107943519B (zh) | 2018-12-11 |
Family
ID=61943934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711322396.1A Active CN107943519B (zh) | 2017-12-12 | 2017-12-12 | 一种时序数据乱序操作处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943519B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110784782B (zh) * | 2019-10-31 | 2021-11-16 | 烽火通信科技股份有限公司 | 一种msp保护配置块间时序抑制方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542057B (zh) * | 2011-12-29 | 2013-10-16 | 北京大学 | 基于固态硬盘的高维数据索引结构设计方法 |
US9256427B2 (en) * | 2012-12-11 | 2016-02-09 | International Business Machines Corporation | Tracking multiple conditions in a general purpose register and instruction therefor |
CN103885886B (zh) * | 2012-12-20 | 2016-08-24 | 华为技术有限公司 | 一种全局数据的地址分配方法及相关装置 |
CN103902260B (zh) * | 2012-12-25 | 2016-08-31 | 华中科技大学 | 一种对象文件系统的预取方法 |
CN105095261A (zh) * | 2014-05-08 | 2015-11-25 | 北京奇虎科技有限公司 | 数据插入方法和装置 |
-
2017
- 2017-12-12 CN CN201711322396.1A patent/CN107943519B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107943519A (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103136243B (zh) | 基于云存储的文件系统去重方法及装置 | |
CN110334152B (zh) | 一种数据同步方法、装置及服务器 | |
JP2019518257A (ja) | 状態制御方法及び装置 | |
CN112000355B (zh) | 用于固件升级的方法及装置、家电设备 | |
CN109508246A (zh) | 日志记录方法、系统和计算机可读存储介质 | |
US10802923B2 (en) | Method and apparatus for incremental backup based on file paths and a prefix tree | |
CN112099800B (zh) | 代码数据的处理方法、装置和服务器 | |
CN106648445B (zh) | 用于网络爬虫的数据存储方法及装置 | |
CN110083379A (zh) | 一种服务器部件升级方法及相关装置 | |
CN106294769B (zh) | 同步工程数据的方法、系统和装置 | |
US10540360B2 (en) | Identifying relationship instances between entities | |
CN105573788B (zh) | 补丁处理的方法和设备以及生成补丁的方法和设备 | |
CN105653209A (zh) | 一种对象存储数据传输方法及装置 | |
CN110990356B (zh) | 一种用于逻辑镜像的实时自动扩容方法和系统 | |
CN104765792B (zh) | 一种维度数据存储的方法、装置及系统 | |
CN103595808A (zh) | 一种文件更新信息推送方法及装置 | |
CN107943519B (zh) | 一种时序数据乱序操作处理方法和装置 | |
US10142415B2 (en) | Data migration | |
CN103078805B (zh) | 使Zookeeper的读性能支持水平扩展的系统和方法 | |
CN110362540A (zh) | 一种数据存储、访客数获取方法及装置 | |
CN113934742B (zh) | 数据更新方法、节点信息存储方法、电子设备及介质 | |
CN115454994A (zh) | 一种基于分布式键值数据库的元数据存储方法及装置 | |
CN112003736B (zh) | 一种多节点配置信息确定方法、装置及存储介质 | |
CN104023056A (zh) | 更新数据的方法和相关设备 | |
CN108008984A (zh) | 一种资源文件下载更新方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |