面向数据流的低时延内存B+树索引构建方法技术

技术编号:13899951 阅读:39 留言:0更新日期:2016-10-25 14:04
面向数据流的低时延内存B+树索引构建方法,重复执行以下步骤:1)通过时间戳为wT的时间窗接收数据,按等时间分片处理数据,每个分片数据接收完后即进行排序,并与之前已排序数据归并,时间窗到期后异步开启新的时间窗并继续后续步骤;2)获窗口元组总量,计算树结构参数:层数,内部节点的子节点数,内部节点数,叶子节点数,叶子节点的子节点数等;3)据步骤2)的参数一次性分配所需的数据结构;4)自底向上依次并行构建叶子节点和内节点得到子树,其根节点指针为rtPtr;5)将元组<wT,rtPtr>插入到全局B+树上并转步骤1)。

【技术实现步骤摘要】

本专利技术涉及一种快速流数据低时延内存B+树索引构建方法,特别是一种面向流数据基于时间窗口的高吞吐、低时延内存B+树索引构建方法。
技术介绍
近年来,数据流的应用越来越广泛。典型的数据流包括传感网感知数据、股价数据、网络监控数据、交通监控系统的监测数据、电信通话记录以及Web点击流。数据流是由流元组构成的一个无限的有序序列。本专利技术中流元组的形式为<timeStamp,dataTuple>,其中“timeStamp”指流元组的时间戳,“dataTuple”指数据元组,与监控对象有关的具体检测数据。与传统的数据管理不同,数据流具有以下的特点:(1)数据流连续、实时到达;(2)数据流的潜在规模是无限的;(3)系统无法控制数据流到达的速率和元组的顺序;(4)数据流一经处理,除非特意保存,否则难以再次处理。传统数据库管理系统在处理规模有限、数据更新频率相对低的数据集合时具有良好的性能;但面对数据流更新持续且频繁,在很短时间内(秒级)要处理大量的数据更新,传统数据库无法维持这样的更新频率。流数据处理方面已有大量的研究工作。研究人员设计了一些适用于数据流处理的系统,如斯坦福大学的STREAM系统,加州大学伯克利分校的TelegraphCQ系统,麻省理工学院、布朗大学和布兰代斯大学联合研发的Aurora系统。上述流数据库系统目的是用于支持在线数据的静态查询、连续查询、近似计算等,不在磁盘上保存整个数据流,仅保存查询结果(如数据聚集)。这些系统通常提供了支持流数据操作的类SQL语言。近几年,数据流应用不再局限于流数据实时处理的速度和查询结果的精确度方面的高要求,这些应用也拓广到海量流数据的深度分析上,对数据流的实时存储提出了要求。而上述数据流管理系统没有关注数据流的实时存储问题。数据实时性、突发性、无限性的特点对数据流的存储速度提出了很高的要求。数据流的实时存储涉及到数据流上实时构建合适的索引,方便后续即席查询操作。有研究人员对网络数据包流的特殊应用提出了一种实时位图索引,针对传感器网络中异构数据流构建位图索引。上述工作针对特定的数据流应用提出的索引构建方法,还无法涵盖各种场景。重要场景之一是基于时间窗的数据流,如交通数据流,需要对不同时间段的数据进行处理,具有实时性强、速度快,构建索引面对这方面的应用需求,解决不同时间窗内的数据查询处理、分析、持久化具有重要应用价值的。本文所提方法可以解决这方面的问题。
技术实现思路
本专利技术要克服现有技术的上述缺点,适应流数据实时性、快速、无限连续的特点,提出一种基于时间窗口批处理、多核计算方法提出快速流数据内存B+树构建方法,该方法具有建树效率高、数据吞吐量大的特性。根据应用需要,设定数据接收窗口时间长度,每个时间窗对应一个时间戳,对窗口中的数据进行批量构建部分索引(一棵子树),然后在全局B+树上插入对应该窗口时间戳的键值,并把对应于该窗口的子树挂接到全局B+树中该键值所对应指针上。本专利技术的面向流数据基于时间窗口的高吞吐、低时延内存B+树索引构建方法包括以下步骤:1)负责接收数据的节点机采用双缓存机制,每个开始接收数据的缓存对应一个时间窗并有相应的时间戳标记winTime;当其中一个时间窗时间到期后,进行相应处理,并启动另一个缓存对应的缓存用于接收后续到达的数据,如此往复。在某个给定时间窗完成流数据接收时(该窗口到期),假设对应该窗口构建好的子树根节点指针rootPtr,以winTime为键值,将元组<winTime,rootPtr>插入到全局B+树上;2)步骤1)中时间窗口中接收的流式元组数据以健-值(Key-Value)格式缓存到KVArray数组中;3)根据窗口时间区间将窗口数据进行等时间分片,每个数据分片接收完成后进行排序,然后与之前排序好的数据进行归并排序;4)同时,若当前窗口流式数据接收时间已达规定时长,则获取当前窗口数据元组数W。设B+树内部节点默认最大容量(最大子节点数)为B,计算以下参数:(4.1)子B+树的层数H,满足:BH-1<W≤BH(4.2)子B+树内部节点的子节点数m m = W / B H - 1 ]]>(4.3)内部节点数NiNodes,(4.4)叶子节点数NleafNodes,NleafNodes=mH-1(4.5)叶子节点的子节点数d:d=W/NleafNodes(4.6)叶子节点的子节点数偏移量dindex,即前dindex个叶子节点的子节点数多一个,使构建的B+树均衡:dindex=W%NleafNodes5)进行树结构初始化:(5.1)初始化节点数组BNodeArray,该数组长度为NiNodes+NleafNodes;其中NiNodes为内部节点数,NleafNodes为叶节点数,内部节点中最后一个节点为根节点;(5.2)将根节点指向节点数组最后一个元素;6)启用多线程构建叶子节点,共构建NleafNodes个节点,每个叶子节点构建相对独立。构建叶子节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第lfindex叶子节点为例进行说明:(6.1)计算父节点相关数据,计算父节点在节点数组BNodeArray的下标lpindex:lpindex=NleafNodes+lfindex/m(6.2)计算本节点相关数据,所属层数lflevel,叶子节点属于最底层,层数即为树的层数H,lflevel=H(6.3)计算子节点相关数据:(6.3.1)计算子节点在数组KVArray中的起始下标lfcsindex。在满足lfindex≤dindex时:lfcsindex=lfindex×d+lfindex;在满足lfindex>dindex时,lfcsindex=lfindex×d+dindex;(6.3.2)计算叶子节点的子节点数NlfcNodes。在满足lfindex≤dindex时,NlfcNodes=d+1;在满足lfindex>dindex时,NlfcNodes=d;(6.4)构建叶子节点,并将子节点通过引用方式将元组数组连接到叶子节点;7)启用多线程构建内部节点,共构建NiNodes个节点,每个叶子节点构建相对独立。构建内部节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第iindex叶子节点为例进行说明:(7.1)计算内部节点的相关数据;(7.1.1)计算内部节点所属层数ilevel,满足以下条件; Σ i = i l e v e l H - 1 m本文档来自技高网
...

【技术保护点】
面向数据流的低时延内存B+树索引构建方法,包括以下步骤:1)负责接收数据的节点机采用双缓存机制,每个开始接收数据的缓存对应一个时间窗并有相应的时间戳标记winTime;当其中一个时间窗时间到期后,进行相应处理,并启动另一个缓存对应的缓存用于接收后续到达的数据,如此往复;在某个给定时间窗完成流数据接收时,该窗口到期,假设对应该窗口构建好的子树根节点指针rootPtr,以winTime为键值,将元组<winTime,rootPtr>插入到全局B+树上;2)步骤1)中时间窗口中接收的流式元组数据以健‑值格式缓存到KVArray数组中;3)根据窗口时间将窗口数据进行等时间分片,每个分片数据接收完成后进行排序,然后与之前排序好的数据进行归并排序;4)同时,若当前窗口流式数据接收时间已达规定时长,则获取当前窗口数据元组数W。设B+树内部节点默认为B,最大容量即最大子节点数,计算以下参数:(4.1)子B+树的层数H,满足:BH‑1<W≤BH(4.2)子B+树内节点的子节点数mm=W/BH-1]]>(4.3)内节点数NiNodes,(4.4)叶子节点数NleafNodes,NleafNodes=mH‑1(4.5)叶子节点的子节点数d:d=W/NleafNodes(4.6)叶子节点的子节点数偏移量dindex,即前dindex叶子节点的子节点数多一个,使构建的B+树均衡:dindex=W%NleafNodes5)待参数计算完毕,进行树结构初始化:(5.1)初始化节点数组BNodeArray,该数组长度为NiNodes+NleafNodes;其中NiNodes为内节点数,NleafNodes为叶节点数,内节点中最后一个节点为根节点;(5.2)将根节点指向节点数组最后一个元素;6)启用多线程构建叶子节点,共构建NleafNodes个节点,每个叶子节点构建相对独立。构建叶子节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第lfindex叶子节点为例进行说明:(6.1)计算父节点相关数据,计算父节点在节点数组BNodeArray的下标lpindex:lpindex=NleafNodes+lfindex/m(6.2)计算本节点相关数据,所属层数lflevel,叶子节点属于最底层,层数即为树的层数H,lflevel=H(6.3)计算子节点相关数据:(6.3.1)计算子节点在数组KVArray中的起始下标lfcsindex。在满足lfindex≤dindex时:lfcsindex=lfindex×d+lfindex;在满足lfindex>dindex时,lfcsindex=lfindex×d+dindex;(6.3.2)计算叶子节点的子节点数NlfcNodes。在满足lfindex≤dindex时,NlfcNodes=d+1;在满足lfindex>dindex时,NlfcNodes=d;(6.4)构建叶子节点,并将子节点通过引用方式将元组数组连接到叶子节点;7)启用多线程构建内节点,共构建NiNodes个节点,每个叶子节点构建相对独立。构建内节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第iindex叶子节点为例进行说明:(7.1)计算内节点的相关数据;(7.1.1)计算内节点所属层数ilevel,满足以下条件;Σi=ilevelH-1mi≤iindex-NleafNodes<Σi=ilevel-1H-1mi]]>(7.1.2)计算内节点在所在层数的次序ilevelindex:ilevelindex=iindex-Σi=ilevelHmi]]>(7.2)计算父节点在数组BNodeArray的下标ipindex:ipindex=Σi=ilevelHmi+ilevelindex/m]]>(7.3)计算内部节点的子节点相关数据;(7.3.1)计算内部节点的子节点在数组KVArray中的起始下标icsindex:icsindex=Σi=ilevel+1Hmi+ilevelindex×m]]>(7.3.2)计算内部节点的子节点数NicNodes:NicNodes=m(7.4)在进行引用连接操作前,须判断所有子节点是否已经完成构建,若已经完成构建,则可以开始引用连接操作。...

【技术特征摘要】
1.面向数据流的低时延内存B+树索引构建方法,包括以下步骤:1)负责接收数据的节点机采用双缓存机制,每个开始接收数据的缓存对应一个时间窗并有相应的时间戳标记winTime;当其中一个时间窗时间到期后,进行相应处理,并启动另一个缓存对应的缓存用于接收后续到达的数据,如此往复;在某个给定时间窗完成流数据接收时,该窗口到期,假设对应该窗口构建好的子树根节点指针rootPtr,以winTime为键值,将元组<winTime,rootPtr>插入到全局B+树上;2)步骤1)中时间窗口中接收的流式元组数据以健-值格式缓存到KVArray数组中;3)根据窗口时间将窗口数据进行等时间分片,每个分片数据接收完成后进行排序,然后与之前排序好的数据进行归并排序;4)同时,若当前窗口流式数据接收时间已达规定时长,则获取当前窗口数据元组数W。设B+树内部节点默认为B,最大容量即最大子节点数,计算以下参数:(4.1)子B+树的层数H,满足:BH-1<W≤BH(4.2)子B+树内节点的子节点数m m = W / B H - 1 ]]>(4.3)内节点数NiNodes,(4.4)叶子节点数NleafNodes,NleafNodes=mH-1(4.5)叶子节点的子节点数d:d=W/NleafNodes(4.6)叶子节点的子节点数偏移量dindex,即前dindex叶子节点的子节点数多一个,使构建的B+树均衡:dindex=W%NleafNodes5)待参数计算完毕,进行树结构初始化:(5.1)初始化节点数组BNodeArray,该数组长度为NiNodes+NleafNodes;其中NiNodes为内节点数,NleafNodes为叶节点数,内节点中最后一个节点为根节点;(5.2)将根节点指向节点数组最后一个元素;6)启用多线程构建叶子节点,共构建NleafNodes个节点,每个叶子节点构建相对独立。构建叶子节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第lfindex叶子节点为例进行说明:(6.1)计算父节点相关数据,计算父节点在节点数组BNodeArray的下标lpindex:lpindex=NleafNodes+lfindex/m(6.2)计算本节点相关数据,所属层数lflevel,叶子节点属于最底层,层数即为树的层数H,lflevel=H(6.3)计算子节点相关数据:(6.3.1)计算子节点在数组KVArray中的起始下标lfcsindex。在满足lfindex≤dindex时:lfcsindex=lfindex×d+lfindex;在满足lfindex>dindex时,lfcsindex=lfindex×d+dindex;(6.3.2)计算叶子节点的子节点数NlfcNodes。在满足lfindex≤dindex时,NlfcNodes=d+1;在满足lfindex>dindex时,NlfcNodes=d;(6.4)构建叶子节点,并将子节点通过引用方式将元组数组连接到叶子节点;7)启用多线程构建内节点,共构建NiNodes个节点,每个叶子节点构建相对独立。构建内节点需要计算三部分数据:父节点相关数据、本节点相关数据、子节点相关数据,并进行相应的引用连接操作,即将孤立的节点通过指针指向其父节点及子节点,从而形成树结构。下面以构建第iindex叶子节点为例进行说明:(7.1)计算内节点的相关数据;(7.1.1)计算内节点所属层数ilevel,满足以下条件; Σ i = i l e v e l H - 1 m i ≤ i i n d e x - N l e ...

【专利技术属性】
技术研发人员:杨良怀项俊腱范玉雷汪庆顺龚卫华
申请(专利权)人:浙江工业大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1