CN103309966B - 基于时间滑动窗口的数据流点连接查询方法 - Google Patents
基于时间滑动窗口的数据流点连接查询方法 Download PDFInfo
- Publication number
- CN103309966B CN103309966B CN201310219213.9A CN201310219213A CN103309966B CN 103309966 B CN103309966 B CN 103309966B CN 201310219213 A CN201310219213 A CN 201310219213A CN 103309966 B CN103309966 B CN 103309966B
- Authority
- CN
- China
- Prior art keywords
- tuple
- slide window
- time slide
- buffer zone
- time
- 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
Abstract
本发明涉及基于时间滑动窗口的数据流点连接查询方法,该方法将一定时间内到来的数据流的元组存入缓冲区,进而对缓冲区内的元组批量与其要连接的时间滑动窗口内的元组进行连接,将完成连接的元组批量删除,将未完成连接的元组批量插入到其对应的时间滑动窗口中;从而大大减少了对时间滑动窗口加锁和解锁操作次数;将缓冲区未完成连接的元组插入到其对应的时间滑动窗口时用顺序存储链表存储元组在时间滑动窗口中的位置,顺序存储链表的头结点中存储该缓冲区的开辟时间,避免查找时间滑动窗口中过期数据时对整个时间窗口进行遍历,只需对顺序存储链表头结点进行遍历,即可找到时间滑动窗口中一批过期元组,降低了运算量,提高了效率。
Description
技术领域
本发明涉及计算机领域的数据流连接方面,尤其涉及基于时间滑动窗口的数据流点连接查询方法。
背景技术
近年来随着信息技术的发展,一种称为数据流的数据类型出现在越来越多的应用中,这类数据的特点是连续不断、产生速度快、实时变化。各类应用中经常对数据流进行各类操作,如选择、连接、聚集等。其中连接操作是应用较多且比较复杂的一种。
由于数据流上的连接查询往往需要较高的实时性,因此要在内存中进行。但内存空间有限,无法将所有历史数据保留下来进行处理,在这种情况下基于时间的滑动窗口技术是应用极为广泛和有效的一种技术。数据流连接的算法主要有基于Nested-loop的算法和基于哈希的算法等,由于基于哈希的算法具有以较高的效率,因此应用较多。AnnitaN.WilschutPeter和M.G.Apers提出了对称哈希连接算法SHJ,它是基于哈希的数据流连接算法的基础。应用SHJ算法处理数据流连接查询时,首先基于时间滑动窗口在内存中分别为两个数据源S-A,S-B各创建哈希表HashTableA和HashTableB。假设一个来自S-A的元组TA到达,先使用TA探测S-B对应的哈希表HashTableB,并输出连接结果,然后将元组插入本数据流应的哈希表HashTableA中,并删除本窗口中过期数据,来自S-B的元组TB到达后的操作类似。在连接的过程中输出连接结果的同时也在不断的构建两数据流基于哈希表结构的时间滑动窗口。其他的XJoin、MJoin算法都可以用来处理数据流连接问题,它们的核心思想与SHJ算法一致。
但随着通信技术、互联网的发展,数据流的类型和形式也更加多样化,对于数据流连接查询连接处理的要求也更加多样化,这些数据流连接查询算法并不能解决实际中的一些问题,如在某些实际的数据流连接查询应用中,两路数据流之间的元组之间存在一一对应的关系。如有两路数据流,数据流A和数据流B分别记为StreamA和StreamB,分别称之为S-A和S-B,数据流中的元组可以表示为Tuple<t,v>,其中t表示元组的时间戳,v表示元组的值。TA表示S-A中元组,TB表示S-B中的元组,WA和WB分别代表为两个数据流建立的时间滑动窗口A和时间滑动窗口B,但利用SHJ等算法处理此类数据流连接查询时存在以下问题:
1.SHJ等算中数据流数据流A某元组探测连接数据流数据流B中的元组成功后输出结果,然而该元组还会参与到与数据流B中其他元组的连接操作中,会输出重复的连接结果,这会造成输出错误。
2.如图1所示,每个元组到来后都执行一次向其对应的时间滑动窗口的探测操作,探测前都要对时间滑动窗口加锁,探测完成都要对时间滑动窗口解锁,这样就会产生大量的加锁、解锁操作,效率低下。以数据流S-A为例,当某个元组TA到来后首先会对WB进行加锁,探测WB后释放对WB的锁。若TA在WB中未找到匹配的元组,则对WA加锁并且将元组TA插入WA中,并删除WA中过期的元组,随后释放对WA的锁。这种情况下,每个元组到来后会执行两次加锁和解锁的操作,开销就极为可观了。
因此这些数据流连接算法无法在此应用场景下输出正确的结果,不能解决此类数据流连接查询的问题。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种基于时间滑动窗口的数据流点连接查询方法,该方法可以大大减少操作过程中加锁和解锁的开销,保证连接结果的正确的前提下大大提高了数据连接和数据清理的效率。
本发明解决上述技术问题的技术方案如下:基于时间滑动窗口的数据流点连接查询方法,包括如下步骤:
步骤1:为数据流A和数据流B分别建立基于时间的滑动窗口,分别为时间滑动窗口A和时间滑动窗口B,进入步骤2;
步骤2:为数据流A和数据流B分别设定更新周期为ta和tb;
步骤3:处理数据流A则依次执行步骤4至步骤8,处理数据流B则依次执行步骤9至步骤13;所述步骤4至步骤8与步骤9至步骤13并行执行;
步骤4:数据流A的更新周期到来时创建一个缓冲区A(n-1)(n=2、3、4……),接收该更新周期内到来的数据流A的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,时间戳为该缓冲区创建的时刻;
步骤5:数据流A的更新周期再次到来时,缓冲区A(n-1)(n=2、3、4……)不再接收元组,而是开辟新的缓冲区A(n)(n=2、3、4……)来接收后续到来的元组,同时对缓冲区A(n-1)中的元组进行处理;
步骤6:缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测,查找与缓冲区A(n-1)中元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接并表明缓冲区A(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤7:查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中;
步骤8:检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理,检测是否有数据流A的元组到来,如果有如则返回步骤5,否则待缓冲区A(n)中和时间滑动窗口A中的元组都处理完后结束;
步骤9:数据流B的更新周期开始时创建一个缓冲区B(n-1)(n=2、3、4……),接收该更新周期内到来的数据流B的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,该时间戳为缓冲区创建的时刻;
步骤10:数据流B的更新周期再次到来时,缓冲区B(n-1)(n=2、3、4……)不再接收元组,而是开辟新的缓冲区B(n)(n=2、3、4……)来接收后续到来的元组,同时对缓冲区B(n-1)中的元组进行处理;
步骤11:缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测,查找与缓冲区中B(n-1)元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接且表明缓冲区B(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤12:查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中;
步骤13:检查在时间滑动窗口B中停留时间超过预定时间TB且时间戳最小的一批元组并清理,检测是否有数据流B的元组到来,如果有如则返回步骤10,否则待缓冲区B(n)中和时间滑动窗口B中的元组都处理完后结束。
本发明的有益效果是:开辟缓冲区来存储接收的数据流的元组,缓冲区中元组对相应的时间滑动窗口进行探测,寻找匹配的元组,探测前对相应的时间滑动窗口进行加锁,待缓冲区中元组全部探测完毕后,对相应的时间滑动窗口解锁;另外,对时间滑动窗口内过期的元组定期进行批量清理,清理前对相应的时间滑动窗口进行加锁,对时间滑动窗口内过期数据清理完毕后则相应的时间滑动窗口解锁;上述对元组进行批量的探测和对时间滑动窗口内过期数据定期进行批量清理的方法达到减少了加锁和解锁操作。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,当更新时刻到来时,缓冲区A1和缓冲区B1不再接收后续到来的元组,而是开辟新的缓冲区来接收后续到来的元组,同时对缓冲区A1和缓冲区B1中的元组进行遍历,利用其中的元组分别对时间滑动窗口B和时间滑动窗口A进行探测。
进一步,步骤6中所述缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测的具体步骤如下:
步骤6.1:对时间滑动窗口B加锁;
步骤6.2:遍历缓冲区A1中的每个元组,每个元组对时间滑动窗口B进行探测,如果在时间滑动窗口B中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区A(n-1)中的该元组与时间滑动窗口B中匹配的元组状态均标记为无效;如果在时间滑动窗口B中未找到与该元组匹配的且状态为有效的元组,则缓冲区A(n-1)中的该元组状态保持为有效;
步骤6.3:释放时间滑动窗口B的锁。
采用上述进一步技术方案的有益效果:缓冲区A(n-1)中所有元组完成探测只需要对时间滑动窗口B进行一次加锁和解锁操作,大大减少了元组探测时对时间滑动窗口B加锁和解锁的开销。
进一步,步骤7中查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中的具体步骤如下:
步骤7.1:对时间滑动窗口A加锁;
步骤7.2:遍历缓冲区A(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口A中,将状态为无效的元组直接删除;
步骤7.3:释放时间滑动窗口A的锁。
采用上述进一步技术方案的有益效果:缓冲区A(n-1)中为完成连接的元组插入到时间滑动窗口A中时,只需要对时间滑动窗口A进行一次加锁和解锁操作,大大减少了元组插入时对时间滑动窗口A加锁和解锁的开销。
进一步,所述步骤7.2中将状态为有效的元组插入到时间滑动窗口A时用顺序存储链表记录插入的元组在时间滑动窗口A中的位置;时间滑动窗口A中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口A的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
进一步,所述步骤8中检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理的具体步骤如下:
步骤8.1:对时间滑动窗口A加锁;
步骤8.2:对时间滑动窗口A对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤8.3:对步骤8.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口A中的元组;
步骤8.4:查看步骤8.3中找出的时间滑动窗口A中的元组,并将找到的元组从时间滑动窗口A中删除;
步骤8.5:释放时间滑动窗口A的锁。
采用上述进一步方案的有益效果:用一个顺序存储链表记录一个缓冲区中插入到时间滑动窗口的元组,由于这些元组具有相同的时间戳,且该时间戳存储在顺序存储链表的头结点中,这样在对时间滑动窗口进行清理时,只需遍历时间滑动窗口对应的若干个顺序存储链表的头结点,找出时间戳最小的,进而根据顺序存储链表内存储的指针指向时间滑动窗口中对应的元组,即可找到过期元组,进而根据元组的状态进行不同的处理,这样避免了对整个时间滑动窗口的遍历,大大提高查找时间滑动窗口内过期元组的效率,极大地减小了在清理过期元组时的开销。
进一步,步骤11中缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测的具体步骤如下:
步骤11.1:对时间滑动窗口A加锁;
步骤11.2:遍历缓冲区B(n-1)中的每个元组,每个元组对时间滑动窗口A进行探测,如果在时间滑动窗口A中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区B(n-1)中的该元组与时间滑动窗口A中匹配的元组状态均标记为无效;如果在时间滑动窗口A中未找到与该元组匹配的且状态为有效的元组,则缓冲区B(n-1)中的该元组状态保持为有效;
步骤11.3:释放时间滑动窗口A的锁。
采用上述进一步技术方案的有益效果:缓冲区B(n-1)中所有元组完成探测只需要对时间滑动窗口A进行一次加锁和解锁操作,大大减少了元组探测时对时间滑动窗口A加锁和解锁的开销。
进一步,步骤12中查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中的具体步骤如下:
步骤12.1:对时间滑动窗口B加锁;
步骤12.2:遍历缓冲区B(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口B中,将状态为无效的元组直接删除;
步骤12.3:释放时间滑动窗口B的锁。
采用上述进一步技术方案的有益效果:缓冲区B(n-1)中为完成连接的元组插入到时间滑动窗口B中时,只需要对时间滑动窗口B进行一次加锁和解锁操作,大大减少了元组插入时对时间滑动窗口B加锁和解锁的开销。
进一步,所述步骤12.2中将状态为有效的元组插入到时间滑动窗口B时用顺序存储链表记录插入的元组在时间滑动窗口B中的位置;时间滑动窗口B中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口B的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
进一步,所述步骤13中检查在时间滑动窗口B中停留的的时间超过预定时间TB且时间戳最小的元组并清理的具体步骤如下:
步骤13.1:对时间滑动窗口B加锁;
步骤13.2:对时间滑动窗口B对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤13.3:对步骤13.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口B中的元组;
步骤13.4:将步骤13.3中找出的时间滑动窗口B中的元组从时间滑动窗口B中删除;
步骤13.5:释放时间滑动窗口B的锁。
采用上述进一步方案的有益效果:用一个顺序存储链表记录一个缓冲区中插入到时间滑动窗口的元组,由于这些元组具有相同的时间戳,且该时间戳存储在顺序存储链表的头结点中,这样在对时间滑动窗口进行清理时,只需遍历时间滑动窗口对应的若干个顺序存储链表的头结点,找出时间戳最小的,进而根据顺序存储链表内存储的指针指向时间滑动窗口中对应的元组,即可找到过期元组,进而根据元组的状态进行不同的处理,这样避免了对整个时间滑动窗口的遍历,大大提高查找时间滑动窗口内过期元组的效率,极大地减小了在清理过期元组时的开销。
进一步,所述时间滑动窗口A和时间滑动窗口B通过哈希表实现。
采用上述进一步技术方案的有益效果:通过哈希表实现,其实现效率较高。
附图说明
图1为现有算法基本结构示意图;
图2为本发明所述基于时间滑动窗口的数据流点连接查询方法的基本机构示意图
图3为本发明所述基于时间滑动窗口的数据流点连接查询方法的流程图;
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明提出数据流点连接查询方法,数据流点连接的定义如下:假设有两个数据流,数据流A和数据流B,数据流A中的元组与数据流B中任一元组连接成功后就失效,不能再参加与数据流B中其他元组的连接操作,对数据流B中元组的要求相同,即数据流B中的元组一旦与数据流A中任一元组匹配成功后便失效,不再参加与数据流A中其他元组的连接操作,因此我们称此连接查询方式为数据流点连接查询方法。
如图1所示,基于时间滑动窗口的数据流点连接查询方法,包括如下步骤:
步骤1:为数据流A和数据流B分别建立基于时间的滑动窗口,分别为时间滑动窗口A和时间滑动窗口B,进入步骤2;
步骤2:为数据流A和数据流B分别设定更新周期为ta和tb;
步骤3:处理数据流A则依次执行步骤4至步骤8,处理数据流B则依次执行步骤9至步骤13;所述步骤4至步骤8与步骤9至步骤13并行执行;
步骤4:数据流A的更新周期到来时创建一个缓冲区A(n-1)(n=2、3、4……),接收该更新周期内到来的数据流A的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,时间戳为该缓冲区创建的时刻;
步骤5:数据流A的更新周期再次到来时,缓冲区A(n-1)(n=2、3、4……)不再接收元组,而是开辟新的缓冲区A(n)(n=2、3、4……)来接收后续到来的元组,同时对缓冲区A(n-1)中的元组进行处理;
步骤6:缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测,查找与缓冲区A(n-1)中元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接并表明缓冲区A(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤7:查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中;
步骤8:检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理,检测是否有数据流A的元组到来,如果有如则返回步骤5,否则待缓冲区A(n)中和时间滑动窗口A中的元组都处理完后结束;
步骤9:数据流B的更新周期开始时创建一个缓冲区B(n-1)(n=2、3、4……),接收该更新周期内到来的数据流B的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,该时间戳为缓冲区创建的时刻;
步骤10:数据流B的更新周期再次到来时,缓冲区B(n-1)(n=2、3、4……)不再接收元组,而是开辟新的缓冲区B(n)(n=2、3、4……)来接收后续到来的元组,同时对缓冲区B(n-1)中的元组进行处理;
步骤11:缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测,查找与缓冲区中B(n-1)元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接且表明缓冲区B(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤12:查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中;
步骤13:检查在时间滑动窗口B中停留时间超过预定时间TB且时间戳最小的一批元组并清理,检测是否有数据流B的元组到来,如果有如则返回步骤10,否则待缓冲区B(n)中和时间滑动窗口B中的元组都处理完后结束。
其中,步骤8中所述的当没有数据流A中元组到来时,则待缓冲区A(n)中和时间滑动窗口A中所有元组都处理完后结束,这里指的结束是暂时不创建缓冲区,当再次有数据流A中元组到来时,则又开始创建缓冲区来接收到来的元组。步骤13中的结束与步骤8中所指的结束的意思相同。
本发明中对数据连接和过期数据的清理都是批量进行的,设定更新周期为T,每隔T就进行一次连接操作,最开始到来的两个数据流分别输入到缓冲区A1和缓冲区B1,插入到缓冲区的元组的初始状态为有效,缓冲区A1和缓冲区B1存储自上次更新至下次更新时间内的数据,每批数据的时间戳是缓冲区开辟的时刻,时间戳存储在缓冲区的头部。
当更新时刻到来时,缓冲区A1和缓冲区B1不再接收后续到来的元组,而是开辟新的缓冲区来接收后续到来的元组,同时对缓冲区A1和缓冲区B1中的元组进行遍历,利用其中的元组分别对时间滑动窗口B和时间滑动窗口A进行探测。
其中,所述时间滑动窗口A和时间滑动窗口B使用哈希表作为基本数据结构,保存距离当前固定时间内的数据。
每个元组表示为<v,s>,v代表元组值,s表示的是在连接过程中元组所处的状态,0为无效,1为有效;同一个缓冲区内的所有元组具有相同的时间戳,该时间戳即为该缓冲区开辟的时刻,该时间戳存储在缓冲区头部,缓冲区中每个元组不必带有时间戳,因此可减小元组占用的空间。
本发明使用缓冲区存储固定时间间隔内到来的元组,缓冲区中元组批量连接另一数据流处于时间滑动窗口中的元组,时间滑动窗口进行一次加锁,加锁后连续执行探测操作,待该缓冲区中所有元组对时间滑动窗口探测完成后,对时间滑动窗口解锁。
进一步,步骤6中所述缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测的具体步骤如下:
步骤6.1:对时间滑动窗口B加锁;
步骤6.2:遍历缓冲区A1中的每个元组,每个元组对时间滑动窗口B进行探测,如果在时间滑动窗口B中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区A(n-1)中的该元组与时间滑动窗口B中匹配的元组状态均标记为无效;如果在时间滑动窗口B中未找到与该元组匹配的且状态为有效的元组,则缓冲区A(n-1)中的该元组状态保持为有效;
步骤6.3:释放时间滑动窗口B的锁。
步骤7中查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中的具体步骤如下:
步骤7.1:对时间滑动窗口A加锁;
步骤7.2:遍历缓冲区A(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口A中,将状态为无效的元组直接删除;
步骤7.3:释放时间滑动窗口A的锁。
其中,所述步骤7.2中将状态为有效的元组插入到时间滑动窗口A时用顺序存储链表记录插入的元组在时间滑动窗口A中的位置;时间滑动窗口A中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口A的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
步骤8中检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理的具体步骤如下:
步骤8.1:对时间滑动窗口A加锁;
步骤8.2:对时间滑动窗口A对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤8.3:对步骤8.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口A中的元组;
步骤8.4:查看步骤8.3中找出的时间滑动窗口A中的元组,并将找到的元组从时间滑动窗口A中删除;
步骤8.5:释放时间滑动窗口A的锁。
其中,所述步骤8.2中将状态为有效的元组插入到时间滑动窗口B时用顺序存储链表记录插入的元组在时间滑动窗口B中的位置;时间滑动窗口B中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口B的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
步骤11中缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测的具体步骤如下:
步骤11.1:对时间滑动窗口A加锁;
步骤11.2:遍历缓冲区B(n-1)中的每个元组,每个元组对时间滑动窗口A进行探测,如果在时间滑动窗口A中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区B(n-1)中的该元组与时间滑动窗口A中匹配的元组状态均标记为无效;如果在时间滑动窗口A中未找到与该元组匹配的且状态为有效的元组,则缓冲区B(n-1)中的该元组状态保持为有效;
步骤11.3:释放时间滑动窗口A的锁。
步骤12中查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中的具体步骤如下:
步骤12.1:对时间滑动窗口B加锁;
步骤12.2:遍历缓冲区B(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口B中,将状态为无效的元组直接删除;
步骤12.3:释放时间滑动窗口B的锁。
其中,步骤12.2中将状态为有效的元组插入到时间滑动窗口B时用顺序存储链表记录插入的元组在时间滑动窗口B中的位置;时间滑动窗口B中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口B的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
步骤13中检查在时间滑动窗口B中停留的的时间超过预定时间TB且时间戳最小的元组并清理的具体步骤如下:
步骤13.1:对时间滑动窗口B加锁;
步骤13.2:对时间滑动窗口B对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤13.3:对步骤13.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口B中的元组;
步骤13.4:将步骤13.3中找出的时间滑动窗口B中元组从时间滑动窗口B中删除;
步骤13.5:释放时间滑动窗口B的锁。
下面以一个周期内的连接操作为例,描述一下对数据流A和数据流B的不同操作,
其中数据流A中的元组插入到InBufA(缓冲区A1),缓冲区A1中未连接成功的元组插入到WA(时间滑动窗口A),其中数据流A中的元组用TA表示;数据流B中的元组插入到InBufB(缓冲区B1),缓冲区B1中未连接成功的元组插入到WB(时间滑动窗口B),数据流B中的元组用TB表示;
对数据流A的处理:
1)数据流A的一批元组插入到InBufA中;
2)对WB加锁,遍历InBufA中的每个元组TA,使用TA对WB进行探测,如果在WB中找到状态为有效的对应的元组,则将连接结果输出,并将WB中对应元组标记为无效,且将TA标记为无效;释放对WB的锁。
3)对WA加锁,再次遍历InBufA中的每个元组TA,若TA状态位有效则将TA插入WA中,若无效则直接删除。将TA插入WA过程中使用顺序存储链表LA记录TA在WA中的位置,链表头结点存储InBufA中数据的时间戳,也即InBufA开辟的时间。假设WA的大小为M,则M=n*T(n>=1)。那么每个时间滑动窗口会对应n个顺序存储链表,每个顺序存储链表存储一批元组插入WA的顺序,这一批元组具有相同的时间戳,该时间戳存储在该顺序存储链表的头结点中。
1)对WA对应的n个的顺序存储链表的头节点进行遍历,找出存储的时间戳最小的一个。遍历该时间戳最小的链表,查看其指向的时间滑动窗口中元组。将找到的元组从时间滑动窗口A中删除。
对数据流B的处理:
1)数据流B的一批元组插入到InBufB中
2)对WA加锁,遍历InBufB中的每个元组TB,使用TB对WA进行探测,如果在WA中找到匹配的且状态为有效的元组,则将连接结果输出,然后将WA中对应元组标记为无效,将TB标记为无效,释放对WA的锁。
3)对WB加锁,再次遍历InBufB中的每个元组TB,若TB状态位有效则将TB插入WB中,若无效则直接删除。插入WB过程中使用顺序存储链表LB记录TB在WB中的位置,链表头结点存储InBufB中数据的时间戳,即InBufB开辟的时间。WB的大小为M,则M=n*T(n>=1)。那么每个滑动窗口中会有n个顺序存储链表存储数据插入WB的顺序。
4)对WB对应的n个的顺序存储链表的头节点进行遍历,找出存储的时间戳最小的一个链表。遍历该时间戳最小的链表,查看其指向的滑动窗口中的元组,将找到的元组从时间滑动窗口B中删除。
由于本发明所述的时间滑动窗口的数据结构是基于哈希表的,如果清理数据时通过直接遍历整个哈希表并对比每个元组的时间戳来找到过期数据,这样运算量非常大,而且效率低下。因此本发明使用顺序存储链表存储元组插入到时间窗口的顺序,在缓冲区中元组插入时间滑动窗口时使用顺序存储链表记录元组的插入顺序,链表节点元组在时间滑动窗口内的位置。时间滑动窗口的大小M=n*T,因此每个时间滑动窗口中会使用n个顺序存储链表记录元组插入的顺序。每个链表的头节点存储对应输入缓冲区的时间戳(也即缓冲区内元组的时间戳),因此元组表示形式中的<t,v,s>中时间戳t可以省略,减小元组的空间占用。当更新时刻到来时首先检测n个链表的头结点存储的时间戳,找到存储的时间戳最小的一个链表,也即滑动窗口中过期元组对应的链表。然后对链表进行遍历,找出链表节点指向的滑动窗口中的元组,就可找到过期元组,避免了对整个时间滑动窗口的遍历,因此能极大地减小在清理过期元组时的开销。
本发明所述基于时间滑动窗口的数据流点连接查询方法在真实网络数据流环境下进行了验证,对于两数据流,数据流的流速近似相等,选择率近99%;在16核32GB内存的单节点上进行测试,处理能力可达到4000万对/时,并且连接结果元组能稳定输出,连接结果准确无误,能有效满足应用的需求。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.基于时间滑动窗口的数据流点连接查询方法,其特征在于,包括如下步骤:
步骤1:为数据流A和数据流B分别建立基于时间的滑动窗口,分别为时间滑动窗口A和时间滑动窗口B,进入步骤2;
步骤2:为数据流A和数据流B分别设定更新周期为ta和tb;
步骤3:处理数据流A则依次执行步骤4至步骤8,处理数据流B则依次执行步骤9至步骤13;所述步骤4至步骤8与步骤9至步骤13并行执行;
步骤4:数据流A的更新周期到来时创建一个缓冲区A(n-1),n=2、3、4……,接收该更新周期内到来的数据流A的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,时间戳为该缓冲区创建的时刻;
步骤5:数据流A的更新周期再次到来时,缓冲区A(n-1),n=2、3、4……,不再接收元组,而是开辟新的缓冲区A(n),n=2、3、4……,来接收后续到来的元组,同时对缓冲区A(n-1)中的元组进行处理;
步骤6:缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测,查找与缓冲区A(n-1)中元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接并表明缓冲区A(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤7:查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中;
步骤8:检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理,检测是否有数据流A的元组到来,如果有则返回步骤5,否则待缓冲区A(n)中和时间滑动窗口A中的元组都处理完后结束;
步骤9:数据流B的更新周期开始时创建一个缓冲区B(n-1),n=2、3、4……,接收该更新周期内到来的数据流B的元组,并初始化元组的状态为有效,该缓冲区中所有元组具有相同的时间戳,该时间戳为缓冲区创建的时刻;
步骤10:数据流B的更新周期再次到来时,缓冲区B(n-1),n=2、3、4……,不再接收元组,而是开辟新的缓冲区B(n),n=2、3、4……,来接收后续到来的元组,同时对缓冲区B(n-1)中的元组进行处理;
步骤11:缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测,查找与缓冲区中B(n-1)元组连接属性值相同的元组;如果找到连接属性值相同的元组则进行连接且表明缓冲区B(n-1)中该元组连接成功,如果未找到表明连接失败;
步骤12:查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中;
步骤13:检查在时间滑动窗口B中停留时间超过预定时间TB且时间戳最小的一批元组并清理,检测是否有数据流B的元组到来,如果有则返回步骤10,否则待缓冲区B(n)中和时间滑动窗口B中的元组都处理完后结束。
2.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,步骤6中所述缓冲区A(n-1)中所有的元组依次对时间滑动窗口B进行探测的具体步骤如下:
步骤6.1:对时间滑动窗口B加锁;
步骤6.2:遍历缓冲区A(n-1)中的每个元组,每个元组对时间滑动窗口B进行探测,如果在时间滑动窗口B中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区A(n-1)中的该元组与时间滑动窗口B中匹配的元组状态均标记为无效;如果在时间滑动窗口B中未找到与该元组匹配的且状态为有效的元组,则缓冲区A(n-1)中的该元组状态保持为有效;
步骤6.3:释放时间滑动窗口B的锁。
3.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,步骤7中查看缓冲区A(n-1)中所有元组连接情况,将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口A中的具体步骤如下:
步骤7.1:对时间滑动窗口A加锁;
步骤7.2:遍历缓冲区A(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口A中,将状态为无效的元组直接删除;
步骤7.3:释放时间滑动窗口A的锁。
4.根据权利要求3所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,所述步骤7.2中将状态为有效的元组插入到时间滑动窗口A时用顺序存储链表记录插入的元组在时间滑动窗口A中的位置;时间滑动窗口A中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
5.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,所述步骤8中检查在时间滑动窗A口中停留时间超过预定时间TA且时间戳最小的一批元组并清理的具体步骤如下:
步骤8.1:对时间滑动窗口A加锁;
步骤8.2:对时间滑动窗口A对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤8.3:对步骤8.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口A中的元组;
步骤8.4:查看步骤8.3中找出的时间滑动窗口A中的元组,并将找到的元组从时间滑动窗口A中删除;
步骤8.5:释放时间滑动窗口A的锁。
6.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,步骤11中缓冲区B(n-1)中的所有元组顺次对时间滑动窗口A进行探测的具体步骤如下:
步骤11.1:对时间滑动窗口A加锁;
步骤11.2:遍历缓冲区B(n-1)中的每个元组,每个元组对时间滑动窗口A进行探测,如果在时间滑动窗口A中找到与该元组匹配的且状态为有效的元组,则输出连接结果,并将缓冲区B(n-1)中的该元组与时间滑动窗口A中匹配的元组状态均标记为无效;如果在时间滑动窗口A中未找到与该元组匹配的且状态为有效的元组,则缓冲区B(n-1)中的该元组状态保持为有效;
步骤11.3:释放时间滑动窗口A的锁。
7.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,步骤12中查看缓冲区B(n-1)中所有元组的连接情况;将连接成功的元组批量删除,将连接失败的元组批量插入到时间滑动窗口B中的具体步骤如下:
步骤12.1:对时间滑动窗口B加锁;
步骤12.2:遍历缓冲区B(n-1)中每个元组,将状态为有效的元组插入到时间滑动窗口B中,将状态为无效的元组直接删除;
步骤12.3:释放时间滑动窗口B的锁。
8.根据权利要求7所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,所述步骤12.2中将状态为有效的元组插入到时间滑动窗口B时用顺序存储链表记录插入的元组在时间滑动窗口B中的位置;时间滑动窗口B中可容纳顺次开辟的多个缓冲区中的未连接成功的元组,每个缓冲区中将要插入到时间滑动窗口B的元组用一个顺序存储链表记录,每个顺序存储链表的头结点存储其对应的缓冲区中元组的时间戳,其中缓冲区中所有元组拥有相同的时间戳,这个时间戳为该缓冲区开辟的时间。
9.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,所述步骤13中检查在时间滑动窗口B中停留的的时间超过预定时间TB且时间戳最小的元组并清理的具体步骤如下:
步骤13.1:对时间滑动窗口B加锁;
步骤13.2:对时间滑动窗口B对应的若干个顺序存储链表的头结点进行遍历,找出头结点中存储的时间戳最小的顺序存储链表;
步骤13.3:对步骤13.2中找出的头结点中存储的时间戳最小的顺序存储链表进行遍历,查看其指向时间滑动窗口B中的元组;
步骤13.4:将步骤13.3中找出的时间滑动窗口B中的元组从时间滑动窗口B中删除;
步骤13.5:释放时间滑动窗口B的锁。
10.根据权利要求1所述基于时间滑动窗口的数据流点连接查询方法,其特征在于,所述时间滑动窗口A和时间滑动窗口B通过哈希表实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310219213.9A CN103309966B (zh) | 2013-06-04 | 2013-06-04 | 基于时间滑动窗口的数据流点连接查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310219213.9A CN103309966B (zh) | 2013-06-04 | 2013-06-04 | 基于时间滑动窗口的数据流点连接查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103309966A CN103309966A (zh) | 2013-09-18 |
CN103309966B true CN103309966B (zh) | 2016-02-24 |
Family
ID=49135184
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310219213.9A Active CN103309966B (zh) | 2013-06-04 | 2013-06-04 | 基于时间滑动窗口的数据流点连接查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103309966B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992840A (zh) * | 2017-12-12 | 2018-05-04 | 清华大学 | 多分段多阈值约束的时间序列模式查找方法和系统 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104615599A (zh) * | 2013-11-05 | 2015-05-13 | 中国空间技术研究院 | 海量数据管理方法和设备 |
CN103823834B (zh) * | 2013-12-03 | 2017-04-26 | 华为技术有限公司 | 一种哈希连接算子间数据传递的方法及装置 |
CN106341368A (zh) * | 2015-07-06 | 2017-01-18 | 中兴通讯股份有限公司 | 一种实现数据处理的方法及装置 |
CN106250395B (zh) * | 2016-07-18 | 2019-08-13 | 广西大学 | 一种数据流相似性的连接方法 |
CN108009111B (zh) * | 2016-11-01 | 2020-02-21 | 华为技术有限公司 | 数据流连接方法及装置 |
CN109542662B (zh) * | 2018-11-23 | 2022-04-05 | 北京锐安科技有限公司 | 一种内存管理方法、装置、服务器及存储介质 |
CN110750565B (zh) * | 2019-08-16 | 2022-02-22 | 安徽工业大学 | 基于物联网数据流滑动窗口模型的实时区间查询方法 |
CN111198659B (zh) * | 2019-12-26 | 2023-09-05 | 天津中科曙光存储科技有限公司 | 基于多滑动窗口实现的并发i/o流模型识别方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6622138B1 (en) * | 2000-09-06 | 2003-09-16 | Oracle International Corporation | Method and apparatus for optimizing computation of OLAP ranking functions |
CN101667197A (zh) * | 2009-09-18 | 2010-03-10 | 浙江大学 | 基于滑动窗口的数据流关联规则挖掘方法 |
CN102163219A (zh) * | 2011-03-28 | 2011-08-24 | 中国人民解放军国防科学技术大学 | 数据流映射类连接查询方法和系统 |
CN102456065A (zh) * | 2011-07-01 | 2012-05-16 | 中国人民解放军国防科学技术大学 | 用于数据流的离线历史统计数据存储和查询方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5337447B2 (ja) * | 2008-10-28 | 2013-11-06 | 株式会社日立製作所 | ストリームデータ処理方法、及びシステム |
-
2013
- 2013-06-04 CN CN201310219213.9A patent/CN103309966B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6622138B1 (en) * | 2000-09-06 | 2003-09-16 | Oracle International Corporation | Method and apparatus for optimizing computation of OLAP ranking functions |
CN101667197A (zh) * | 2009-09-18 | 2010-03-10 | 浙江大学 | 基于滑动窗口的数据流关联规则挖掘方法 |
CN102163219A (zh) * | 2011-03-28 | 2011-08-24 | 中国人民解放军国防科学技术大学 | 数据流映射类连接查询方法和系统 |
CN102456065A (zh) * | 2011-07-01 | 2012-05-16 | 中国人民解放军国防科学技术大学 | 用于数据流的离线历史统计数据存储和查询方法 |
Non-Patent Citations (4)
Title |
---|
Processing Sliding Window Join Aggregate in Continuous Queries over Data Streams;Weiping Wang等;《ADBIS 2004》;20041231;348-363 * |
Processing Sliding Window Multi-Joins in Continuous Queries over Data Streams;Lukasz Golab等;《the 29th VLDB Conference》;20031231;1-12 * |
基于滑动窗口的数据流连续J-A查询的处理方法;王伟平等;《Journal of software》;20060430;第17卷(第4期);740-749 * |
数据流上周期更新滑动窗口的连接算法;王伟平等;《哈尔滨工业大学学报》;20050630;第37卷(第6期);756-759 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992840A (zh) * | 2017-12-12 | 2018-05-04 | 清华大学 | 多分段多阈值约束的时间序列模式查找方法和系统 |
CN107992840B (zh) * | 2017-12-12 | 2019-02-05 | 清华大学 | 多分段多阈值约束的时间序列模式查找方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103309966A (zh) | 2013-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103309966B (zh) | 基于时间滑动窗口的数据流点连接查询方法 | |
CN101876986B (zh) | 基于有限状态自动机的字符串匹配方法及内容过滤设备 | |
CN103580900B (zh) | 一种基于事件链的关联分析系统 | |
CN102938000B (zh) | 一种高速并行的无锁流表路由查找方法 | |
CN104363174B (zh) | 一种连接跟踪管理装置和方法 | |
CN103678491A (zh) | 一种基于Hadoop中小文件优化和倒排索引的方法 | |
Chen et al. | Global asymptotic stability of a class of neural networks with distributed delays | |
CN104572983A (zh) | 基于内存的散列表的构建方法、文本查找方法及相应装置 | |
CN104778258A (zh) | 一种面向协议数据流的数据抽取方法 | |
CN110727760B (zh) | 一种对大规模知识图谱进行分布式正则路径查询的方法 | |
CN105373601A (zh) | 一种基于关键字词频特征的多模式匹配方法 | |
CN102521356B (zh) | 基于确定有限状态自动机的正则表达式匹配设备和方法 | |
Dworzański et al. | On compositionality of boundedness and liveness for nested Petri nets | |
Li et al. | Aggressive complex event processing with confidence over out-of-order streams | |
CN103198126A (zh) | 物联网时空数据管理方法 | |
CN103166942A (zh) | 一种恶意代码的网络协议解析方法 | |
CN103226551A (zh) | 基于tcam的非确定性有限自动机的匹配方法和装置 | |
CN106980901B (zh) | 流式rdf数据并行推理算法 | |
CN105095100B (zh) | 一种硬件实现hash链表的装置 | |
CN104700055A (zh) | 一种多概率rfid事件流上复杂事件检测方法 | |
Tanbeer et al. | Efficient mining of association rules from wireless sensor networks | |
CN105404646A (zh) | 动态数据的多数据库处理查询系统与方法 | |
CN101447860B (zh) | 任意位高速滑动相关器及其应用 | |
CN102867036A (zh) | 实现Aho-Corasick算法所用数据结构动态生成的改进方法 | |
CN104391950A (zh) | 面向制造物联海量数据流哈希b+树结构复杂事件检测方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |