为数据建立索引的系统和方法以及数据查询方法与流程

文档序号:12041605阅读:180来源:国知局
为数据建立索引的系统和方法以及数据查询方法与流程
本发明涉及云计算技术,具体涉及一种用于为数据建立索引的系统和方法以及相应的数据查询方法。

背景技术:
随着RFID、GPS等技术的发展,物联网得到了迅速的普及和广泛的应用。在物联网环境下,数以百万计的检测对象会周期性地产生数据,导致传统的关系型数据库在扩展性方面遇到了瓶颈,其系统吞吐量达不到要求。云数据管理系统具有很好的扩展性,同时支持高度并发,是物联网数据管理的有效方案。云数据管理系统在主键(rowkey)上支持高效的点查询和范围查询。然而,对于非主键查询,则需要进行全表扫描。虽然可以利用映射-化简(Map-Reduce)技术来提高查询的效率,但是对于选择率比较低的查询来说,性能还是较差。物联网数据往往具有多维特性。除了具有时间、空间维度的信息之外,物联网数据还包括很多其他维度的信息。此外,对物联网数据的查询大都是基于时空的多维查询。因此,在物联网应用环境中,除了要满足单个维度的快速查询之外,还需要提供高效的多维查询。物联网数据的另外一个特点就是更新频繁。在物联网环境下,监测对象往往按照一定的时间间隔周期性地产生新的数据,数据更新非常频繁。特别地,在监测对象众多并且数据采样频率比较高的情况下,数据的并发度非常高,因而对数据管理系统的吞吐率提出较高的要求。当前,已经提出了一种云系统中的多维数据索引方案(RT-CAN),其专门用于多维数据的索引和查询。RT-CAN索引方案是一个基于R树(R-tree)的双层索引方案,支持多个属性上的点查询和范围查询。在每个存储节点上,针对本地数据建立相应的R-tree索引,然后按照特定的 索引节点选择策略从每个局部索引中选择一部分节点发布到全局索引中。为了提高查询的速度,保证系统的可扩展性,在全局索引中采用了能够支持多维查询的覆盖网络CAN网络,在进行索引节点选择的时候采用了基于代价模型的自适应调整策略。具体地,RT-CAN索引方案大致包括以下操作:(1)当从客户端收到一个新的数据插入请求后,通过云存储系统的接口找到对应的数据存储节点,并将数据保存到该节点上;(2)对该存储节点上建立的R-Tree结构的本地索引进行更新;以及(3)将本地索引的更新同步到全局索引。但是,为了保持树的平衡,在数据插入的过程中,RT-CAN方案需要不断地对索引节点进行分裂调整(每次数据的插入都会触发对本地索引的更新,进而影响到全局索引)。所以,索引的维护代价非常高,尤其是对数据插入比较频繁的应用来说,索引的维护代价过高会对系统的吞吐量带来很大的影响。因此,该方案并不适合应用于物联网中。因此,需要一种适用于物联网的数据索引系统和方法,能够针对物联网中更新频繁的多维数据实现高吞吐量操作。

技术实现要素:
在本发明中,提出了一种同时支持频繁数据更新和高效数据查询的方案。本发明的主要思想是:在物联网应用中,监测对象的数据一旦生成就不会发生改变。另外,监测对象的空间分布往往具有不均匀性,并且在不同时间段内监测对象的空间分布也会发生变化。因此,可以考虑在时间维度上把数据分为当前时间段数据和历史时间段数据,并针对不同时间段的数据在不同的粒度上进行索引,从而减少索引更新的次数并降低索引维护的代价。另外,可以考虑数据在时间和空间分布上的不均衡性来进行数据划分。根据本发明的一个方面,提供了一种用于为数据建立索引的系统,包括:时间段划分单元,被配置为将预定时间范围划分为多个时间段;第一索引建立单元,被配置为:针对当前时间段中的数据建立第一级别索引,每个第一级别索引包括时间段索引和子空间索引;以及第二索引建立单元,被配置为:在当前时间段之后的时间段,针对当前时间段中 的数据建立第二级别索引,其中,第二级别索引比第一级别索引具有更细的粒度。优选地,第一索引建立单元采用B+树来建立时间段索引,B+树中的每一个叶节点包含子空间索引。优选地,第一索引建立单元采用R树来建立子空间索引。优选地,第二索引建立单元采用R树或网格索引来建立第二级别索引,所述第二级别索引是记录级别的索引。优选地,该系统还包括:数据存储单元,被配置为将时间和空间上相邻的数据存储在相同或相邻的存储区域中。优选地,时间段划分单元被配置为:根据先验知识将预定时间范围划分为多个时间段,使得数据均匀分布在所述多个时间段内。优选地,时间段划分单元还被配置为:计算每个时间段内的数据划分的均匀程度以及数据划分层数;如果某个时间段内的数据划分的均匀程度大于第一阈值并且数据划分层数大于第二阈值,则将该时间段划分为更多个时间段;或者如果某个时间段内的数据划分的均匀程度小于第一阈值并且数据划分层数小于第二阈值,则将该时间段与相邻的时间段合并。根据本发明的另一个方面,提供了一种用于为数据建立索引的方法,包括:将预定时间范围划分为多个时间段;针对当前时间段中的数据建立第一级别索引,每个第一级别索引包括时间段索引和子空间索引;以及在当前时间段之后的时间段,针对当前时间段中的数据来建立第二级别索引,其中,第二级别索引比第一级别索引具有更细的粒度。优选地,采用B+树来建立时间段索引,B+树中的每一个叶节点包含子空间索引。优选地,采用R树来建立子空间索引。优选地,采用R树或网格索引来建立第二级别索引,所述第二级别索引是记录级别的索引。优选地,该方法还包括:将时间和空间上相邻的数据存储在相同或相邻的存储区域中。优选地,将预定时间范围划分为多个时间段的步骤包括:根据先验知识将预定时间范围划分为多个时间段,使得数据均匀分布在所述多个时间段内。优选地,将预定时间范围划分为多个时间段的步骤还包括:计算每个时间段内的数据划分的均匀程度以及数据划分层数;如果某个时间段内的数据划分的均匀程度大于第一阈值并且数据划分层数大于第二阈值,则将该时间段划分为更多个时间段;或者如果某个时间段内的数据划分的均匀程度小于第一阈值并且数据划分层数小于第二阈值,则将该时间段与相邻的时间段合并。根据本发明的另一个方面,提供了一种用于查询数据的方法,包括:判断要查询的数据是当前数据还是历史数据;如果要查询的数据是当前数据,则通过第一级别索引来查询该数据,每个第一级别索引包括时间段索引和子空间索引;以及如果要查询的数据是历史数据,则通过第二级别索引来查询该数据,其中,第二级别索引比第一级别索引具有更细的粒度。优选地,该查询包括以下类型:点查询、范围查询和K近邻查询。优选地,时间段索引是采用B+树来建立的,B+树中的每一个叶节点包含子空间索引。优选地,子空间索引是采用R树来建立的。优选地,第二级别索引是采用R树或网格索引来建立的,所述第二级别索引是记录级别的索引。本发明能够采用具有不同粒度的索引对当前数据和历史数据分别建立索引,极大地降低了在频繁更新的情况下的索引维护代价。此外,本发明所采用的数据划分策略可以使存储节点内部的数据分布均匀并且在物理存储空间上彼此相邻,从而减少了查询过程中的无效扫描,提升了查询性能。附图说明通过下文结合附图的详细描述,本发明的上述和其它特征将会变得更加明显,其中:图1是示出了根据本发明第一实施例的、用于为数据建立索引的系统的框图。图2是示出了根据本发明第一实施例的索引结构的示意图。图3是示出了根据本发明第二实施例的、用于为数据建立索引的系统的框图。图4是示出了用于描述根据本发明实施例的数据存储单元的操作示例的示意图图5是示出了根据本发明第三实施例的、用于为数据建立索引的方法的流程图。图6是示出了根据本发明第四实施例的、用于查询数据的方法的流程图。具体实施方式下面,通过结合附图对本发明的具体实施例的描述,本发明的原理和实现将会变得明显。应当注意的是,本发明不应局限于下文所述的具体实施例。另外,为了简便起见,省略了与本发明无关的公知技术的详细描述。第一实施例图1是示出了根据本发明第一实施例的、用于为数据建立索引的系统10的框图。如图1所示,系统10包括时间段划分单元110、第一索引建立单元120和第二索引建立单元130。下面,详细描述系统10中的各个单元的具体操作。时间段划分单元110被配置为将预定时间范围划分为多个时间段。由于物联网数据的区域分布往往随时间发生变化,所以时间段划分单元110可以在时间维度上把数据分成若干个个时间段(TIS),即TIS={[t1,t2),[t2,t3),...,[ti-1,ti),...},其中[ti-1,ti)是一个左闭右开的时间区间,所有这些时间区间是不重叠的。当然,本领域技术人员可以理解,每一个时间段[ti-1,ti)也可以是左开右闭的时间区间。时间段划分单元110可以根据先验知识划分时间段。优选地,时间段划分单元110可以将预定时间范围划分为多个时间段,使得数据均匀地分布在多个时间段内。例如,在监测出行车辆的应用示例中,可以以天为单位(即,预定时间范围是一天),将白天的时间划分为较小的时间段,而将夜晚的时间划分为较大的时间段。这样,可以保证每个时间段中的数据的个数基本相同。在时间段划分单元110将预定时间范围划分为多个时间段后,第一索引建立单元120为当前时间段中的数据建立第一级别索引(粗粒度级别索引),该第一级别索引包括时间段索引和子空间索引。在本实施例中,第一索引建立单元120可以采用各种数据结构来分别建立对时间段和子空间的索引。例如,第一索引建立单元120可以采用B+树来建立各个时间段的索引,并采用R树来建立各个子空间的索引。第二索引建立单元130被配置为:在当前时间段之后的时间段,针对当前时间段的数据建立第二级别索引(细粒度级别索引)。在本实施例中,第二索引建立单元130可以采用各种数据结构来建立第二级别索引。例如,第二索引建立单元130可以采用R树来建立记录第二级别索引。下面,结合附图2来描述第一索引建立单元120和第二索引建立单元130的示例操作。图2是示出了根据本发明第一实施例的索引结构的示意图。如图2中所示,该索引结构的头两层分别是时间段索引和子空间索引,它们是针对当前时间段中的数据的索引(第一级别索引)。索引结构的第三层是记录级别的网格索引,它们是针对历史时间段中的数据的索引(第二级别索引)。假设当前时间段是[t1,t2)。针对属于当前时间段[t1,t2)中的数据,第一索引建立单元120为该数据建立第一级别索引(图2中的第一层索引),其中当前时间段中的所有数据具有相同的时间段索引。进一步地,第一 索引建立单元120将二维空间区域划分为若干个互补且重叠的矩形子空间。例如,可以采用BucketPRKD-tree或者BucketPRQuadtree进行划分。这些矩形子空间中的每个子空间可以对应于一个存储区域,并且采用R树对这些子空间进行索引。这样,按照所划分的子空间,可以为当前时间段中的数据建立子空间索引(图2中的第二层索引)。当时间进入下一时间段[t2,t3)时,原先的时间段[t1,t2)成为了历史时间段,而时间段[t2,t3)变为当前时间段。同样,第一索引建立单元120按照上述过程,针对时间段[t2,t3)中的数据建立第一级别索引。另外,第二索引建立单元130针对历史时间段[t1,t2)中的数据,建立第二级别索引(图2中的第三层索引)。例如,为了进一步加快区域内部的数据查询速度,可以为每个区域建立记录级别的局部索引,该局部索引可以采用R树或网格索引两种方式。再次参考图1,优选地,时间段划分单元110还可以根据划分结果是否合理而动态地调整划分策略。即,时间段划分单元110可以被配置为:将预定时间范围划分为多个时间段,使得数据均匀分布在多个时间段内。在实际应用当中,数据在时间维度上是单调增加的,而在空间维度上通常会固定在某个特定的区域范围内。而且,物联网数据在时间和空间上的分布规律往往是不一样的。所以,可以将时间和空间分开进行考虑。在时间维度上,根据数据的分布规律划分成若干个时间段;对于某个特定时间段内的数据,在空间维度上可以采用例如BucketPRKD-tree或者BucketPRQuadtree进行动态划分。另外,比较稠密的空间可以被多次划分,使得数据在各个子空间中的分布均衡。例如,时间段划分单元110可以以天为单位,把每天的数据划分到多个时间段中(即,把一天划分为多个时间段)。优选地,时间段划分单元110被配置为执行如下过程来优化数据划分(动态数据划分):(1)首先,根据具体的应用场景来估计每天的数据记录总数N。假设每个子空间最多包含S条记录,每个时间段内的数据平均划分成R个 子空间。因此,一天可以被划分成个段,将这些段分别标识为t1,t2,...,tk。(2)分别对t1,t2,...,tk时间段内的数据利用BucketPRKD-tree进行空间划分,记录下树的深度,并监控每个子空间的大小,计算每个时间段内的各个子空间的数据量的方差:其中Ni表示ti时间段内子空间的数目,xm表示第ti个时间段中第m个子空间的大小,而x表示平均子空间大小。Di表示第ti个时间段中的子空间大小的方差,其反映出该时间段内的数据划分的均匀程度。(3)根据方差Di和数据划分的层数Depi来调整时间段的划分。具体地,如果Di超过某个阈值,说明数据在该时间段内分布不均匀,同时如果Depi也大于某个阈值时,则指示需要缩小该时间段,因而可以把时间段ti分为两个时间段ti1和ti2。如果Di小于某个阈值,说明数据分布比较均匀,而同时如果Depi小于某个阈值,则说明第ti个时间段内的数据量太少,因而可以把第ti个时间段与相邻的时间段(ti-1或ti+1)合并。(4)如果时间段的划分和区域的划分在连续一段时间内保持不变,则可以把划分策略固定下来,停止执行动态划分。另外,在系统运行过程中,可以对数据分布情况进行连续监控。一旦发现数据分布出现不均衡的情况,则可以重新执行数据动态划分。采用根据本实施例的系统,降低了索引的维护代价,从而能够支持物联网应用中大规模数据的频繁更新。第二实施例图3是示出了根据本发明第二实施例的、用于为数据建立索引的系统30的框图。如图3所示,系统30包括时间段划分单元310、第一索引建立单元320、第二索引建立单元330和数据存储单元340。需要指出,图3中所示的时间段划分单元310、第一索引建立单元320、第二索引建立单元330与图1中所示的时间段划分单元110、第一索引建立单元120、第二索引建立单元130相似。为了简便起见,下文仅对数据存储单元340进行详细描述。数据存储单元340被配置为将时间和空间上相邻的数据存储在相同或相邻的存储区域中。这样,能够减少查询过程中需要扫描的存储区域的数量,从而提高查询效率。具体地,图4是示出了用于描述根据本发明实施例的数据存储单元340的操作示例的示意图。如图4所示,已经将预定时间范围划分为若干个时间段,并且针对每个时间段内的数据在二维空间中进行划分以形成若干个子空间。对于历史时间段[t0,t3)中的数据,数据存储单元340将其存储在区域1和区域2中;而对于当前时间段[t3,t4)中的数据,数据存储单元340将其存储在区域m中。这些存储区域(区域1、区域2、...区域m)是物理上相邻的存储区域。由于将时间和空间上相邻的数据存储在物理上相邻的存储区域中,当执行数据查询时,可以快速读取这些存储区域,从而提高了查询效率,这将在下文更加详细地进行描述(参见第四实施例)。采用根据本实施例的系统,不仅能够支持物联网应用中大规模数据的频繁更新,而且能够减少物联网数据查询过程中需要扫描的存储区域的数量,从而提高了查询效率。第三实施例图5是示出了根据本发明第三实施例的、用于为数据建立索引的方法50的流程图。如图5所示,方法50在步骤S510处开始。在步骤S520,将预定时间范围划分为多个时间段。可以根据先验知识划分时间段,或者可以将预定时间范围划分为多个时间段,使得数据 均匀地分布在多个时间段内。优选地,还可以根据划分结果是否合理而动态地调整划分策略。在步骤S530,针对当前时间段中的数据建立第一级别索引(粗粒度级别索引),该第一级别索引包括时间段索引和子空间索引。可以采用各种数据结构来分别建立对时间段和子空间的索引。例如,可以采用B+树来建立各个时间段的索引,并采用R树来建立各个子空间的索引。在步骤S540,在当前时间段之后的时间段,针对当前时间段中的数据来建立第二级别索引(细粒度级别索引)。可以采用各种数据结构来建立第二级别索引,例如R树。最后,方法50在步骤S550处结束。采用根据本实施例的方法,能够支持物联网应用中大规模数据的频繁更新,而且能够减少物联网数据查询过程中需要扫描的存储区域的数量,从而提高了查询效率。第四实施例图6是示出了根据本发明第四实施例的、用于查询数据的方法60的流程图。如图6所示,方法60在步骤S610处开始。在步骤S620,判断要查询的数据是当前数据还是历史数据。如果要查询的数据是当前数据,则在步骤S630通过第一级别索引来查询该数据,该第一级别索引包括时间段索引和子空间索引。如果要查询的数据是历史数据,则在步骤S640通过第二级别索引来查询该数据,第二级别索引比第一级别索引具有更细的粒度。在方法60中,可以是采用B+树来建立时间段索引,B+树中的每一个叶节点包含子空间索引,并且可以采用R树来建立子空间索引。另外,可以采用R树或网格索引来建立第二级别索引,而且该第二级别索引是记录级别的索引。方法60能够执行的查询类型包括但不限于以下类型:点查询、范围查询和K近邻查询。以下,对这三种查询分别进行详细描述。■点查询假设Q(t,lat,lon)表示一个针对时间、经度、纬度的点查询。当用户发起一个点查询之后,首先根据时间t通过时间段索引确定查询点所在的时间段,然后根据所在的时间段和经度、纬度信息计算出查询点的主键(rowkey),最后利用主键向集群发起查询请求,然后对返回的结果再利用t、lat、lon进行过滤。下面的算法1(伪代码)描述了点查询的流程。具体地,第1行代码对结果集进行初始化。第2行代码通过时间段索引计算出t所在的时间段序号Tn。第3行代码根据Z-ordering编码的计算规则求出查询点的Z-value值,该值即为相应记录的主键。第4行代码则直接利用主键获取相应的记录。由于同一个主键下可能具有多个不同版本的记录,所以第5行代码对所有版本的数据进行过滤。最后,第6行代码返回符合要求的结果。算法1-点查询■范围查询假设Q(Et,Es)表示一个范围查询,其中Et表示时间范围,Es表示空间范围。下面的算法2(伪代码)描述了范围查询的流程。具体地,第1-4行代码进行初始化。第5行代码通过时间段索引确定待查询的数据所在的时间段。第6-7行代码在每个时间段内通过查询对应的R树索引,得到空间范围Es所包含的区域(region)列表。第8-17行代码从各个区域中查询所需要的数据:如果某个区域的范围是待查询范围(Et,Es) 的子集,则说明区域中的所有数据都是结果中的数据,所以直接扫描整个区域即可得到所有的数据;如果区域的范围与待查询范围有交集,再判断区域范围与待查询范围的重叠度,如果重叠度大于某个阈值,则需要对整个区域进行扫描,扫描的过程中再进行过滤,从而得到所需要的数据;否则,则可以通过局部索引找出对应数据的主键,然后再利用主键来获取最终的数据。算法2-范围查询■K近邻(KNN)查询下面的算法3描述了KNN查询的过程。具体地,该过程主要包括两个步骤:查询扩展和过滤。查询扩展主要负责对查询范围的扩充,过滤主要对当前范围内的数据进行计算,判断其是否符合要求。具体地,第1-5行代码进行初始化。第6行代码根据时间确定对应的R树索引。第7-14行代码根据查询点Q、查询半径(radius)获得相应的区域(region)列表,对于每一个区域,根据该区域的范围和查询半径确定可能的主键范围,然后根据主键范围获取数据。最后,第15行代码对查询范围进行扩展。算法3-KNN查询采用根据本实施例的方法,能够减少物联网数据查询过程中需要扫描的存储区域的数量,从而提高了查询效率。综上所述,本发明能够采用不同级别的(粒度不同的)索引对当前数据和历史数据进行索引,大大降低了在高频度更新的情况下的索引维护代价。另外,本发明还可以采用动态数据划分过程,使存储节点内部的数据分布均匀且在空间相关性上彼此相邻,从而能够极大地减少查询过程中的无效扫描,提升了查询的性能。应该理解,本发明的上述实施例可以通过软件、硬件或者软件和硬件两者的结合来实现。例如,上述实施例中的用于为数据建立索引的系统及其内部的各种组件可以通过多种器件来实现,这些器件包括但不限于:通用处理器、数字信号处理(DSP)电路、可编程处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、可编程逻辑器件(CPLD),等等。此外,这里所公开的本发明的实施例可以在计算机程序产品上实现。更具体地,该计算机程序产品是如下的一种产品:具有计算机可读介质,计算机可读介质上编码有计算机程序逻辑,当在计算设备上执行时,该计算机程序逻辑提供相关的操作以实现本发明的上述技术方案。当在计算系统的至少一个处理器上执行时,计算机程序逻辑使得处理器执行本发明实施例所述的操作(方法)。本发明的这种设置典型地提供为设置或编码在例如光介质(例如CD-ROM)、软盘或硬盘等的计算机可读介质上的软件、代码和/或其他数据结构、或者诸如一个或多个ROM或RAM或PROM芯片上的固件或微代码的其他介质、或一个或多个模块中的可下载的软件图像、共享数据库等。软件或固件或这种配置可安装在计算设备上,以使得计算设备中的一个或多个处理器执行本发明实施例所描述的技术方案。尽管以上已经结合本发明的优选实施例示出了本发明,但是本领域的技术人员将会理解,在不脱离本发明的精神和范围的情况下,可以对本发明进行各种修改、替换和改变。因此,本发明不应由上述实施例来限定,而应由所附权利要求及其等价物来限定。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1