CN102651020B - 一种海量传感器数据存储与查询方法 - Google Patents
一种海量传感器数据存储与查询方法 Download PDFInfo
- Publication number
- CN102651020B CN102651020B CN201210093419.7A CN201210093419A CN102651020B CN 102651020 B CN102651020 B CN 102651020B CN 201210093419 A CN201210093419 A CN 201210093419A CN 102651020 B CN102651020 B CN 102651020B
- Authority
- CN
- China
- Prior art keywords
- sampled
- leaf node
- value
- data
- 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.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 54
- 238000005070 sampling Methods 0.000 claims abstract description 52
- 230000003068 static effect Effects 0.000 claims abstract description 25
- 238000012544 monitoring process Methods 0.000 claims abstract description 19
- 238000005192 partition Methods 0.000 claims description 25
- 230000002123 temporal effect Effects 0.000 claims description 20
- 238000009826 distribution Methods 0.000 claims description 11
- 238000004364 calculation method Methods 0.000 claims description 10
- 230000008859 change Effects 0.000 claims description 9
- 238000013507 mapping Methods 0.000 claims description 9
- 230000008569 process Effects 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 8
- 238000013500 data storage Methods 0.000 claims description 5
- 238000013075 data extraction Methods 0.000 claims description 2
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 31
- 230000007246 mechanism Effects 0.000 abstract description 5
- 230000007547 defect Effects 0.000 abstract description 2
- 238000013523 data management Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 241001269238 Data Species 0.000 description 3
- 238000003672 processing method Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 239000000498 cooling water Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000012827 research and development Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种海量传感器数据存储与查询方法,属于传感器数据领域。本存储方法为:建立一包括一根结点和若干叶结点的两层存储架构;接收服务器将传感器发送来的采样数据分配给相应的叶结点;每一叶结点将传感器对同一监控对象的历次采样值以统一的形式存储到叶结点数据库的一个元组中,构成该监控对象的采样数据序列;建立所述两层存储架构的全局时空分布式索引和全局关键字分布式索引。本发明通过全局关键字索引、全局时空索引以及全局查询处理机制,可以同时支持快速的时空查询和关键字查询。本发明兼容多种查询类型的快速处理,突破了目前时空数据库主要针对静态的空间数据或相对单一的时空数据、缺乏有效的异构数据流表示方法的局限。
Description
技术领域
本发明涉及传感器数据领域及时态与空间数据库领域,提出了一种能够同时支持快速时空查询和关键字查询的海量传感器采样数据存储与查询处理方法。
背景技术
目前,各类传感器应用系统中,对海量传感器采样数据集中存储管理与查询处理的需求非常强劲,例如在物联网系统、智能交通系统、城市实时监控系统中,需要将海量的、不同类型的、持续动态上传的传感器采样值集中存放在数据中心,并通过相应的查询接口对传感器的历史及当前采样值进行快速的查询与分析处理,从而进行相应的应对处理。
然而,针对上述需求,目前还没有有效的解决方案。在海量数据处理方面,目前最有效的方法是云数据管理技术。但是几乎所有的云数据管理系统均为“键值”数据库,即按照主关键字对数据进行分布组织和查询处理,从而快速地提取与查询关键字相对应的完整数据库记录。这种方法在应对传感器采样数据时存在着诸多的局限性,例如在针对传感器采样数据的查询中,仅有小部分的查询是关键字查询(如“查询传感器“S001”的历次采样数据序列”),而更多的查询是基于时间与空间约束条件来表示的(如“查找区域A中所有空气监控传感器在t时刻的采样值”)。对于这种基于时空约束条件的查询,“键值”数据库是无法有效地进行支持的。
针对海量数据处理的另一项关键技术是并行数据库技术。并行数据库技术将多个关系数据库组织成数据库集群,来支持海量结构化数据的处理。但是,这种方法在应对传感器采样数据管理时同样存在着诸多的缺陷。首先,关系数据库集群在处理关键字查询时的性能要远低于键值数据库,不能很好地支持“键值”查询;其次,关系数据库集群采用了严格的事务处理机制(如数据加锁机制、多版本机制等),因此在面对频繁更新的传感器采样数据时,效率十分低下,极大地限制了所能够支持的传感器数据的规模;最后,关系数据库集群通常只支持常规的通用数据类型和查询操作,而无法有效地针对复杂异构的、带有时空属性的传感器采样数据进行表示、计算和查询处理。
发明内容
针对目前在海量异构传感器采样数据查询处理方面缺乏有效方法的现状,本发明提出一种时空数据库与键值数据库相结合的海量传感器采样数据存储与查询处理方法(为了方便叙述,我们将该方法简称为“STDB-KV存储方法”),目的是为传感器系统中的海量数据管理提供一种可行的解决方案。该方法不仅能够通过专用的数据类型和查询操作有效地存储和查询传感器历史及当前采样数据,而且可以同时支持快速的时空查询和关键字查询。根据详细的文献调研分析,目前在这方面的相关研究与产品研发均处于空白。
为了实现上述目的,本发明所采用的技术方案是:
一种海量传感器数据存储方法,其步骤为:
1)建立一包括一根结点和若干叶结点的两层存储架构;其中,根结点存储一全局查询所需的全局数据字典,叶结点存储传感器采样数据;所述全局数据字典包括一管辖区域分区表和一全局关键字分区表;每一叶结点对应一管辖区域,所有叶结点的管辖区域构成所述管辖区域分区表;所述全局关键字分区表的记录格式为(keyRange,nodeID),keyRange是关键字值域中的一个区域范围,nodeID是与该范围相对应的叶结点的标识;
2)采样数据接收服务器根据所述管辖区域分区表将传感器发送来的采样数据分配给相应的叶结点;
3)每一叶结点将传感器对同一监控对象的历次采样值以统一的形式存储到叶结点数据库的一个元组中,构成该监控对象的采样数据序列;其中,所述数据库采用关系表存储所述采样数据序列,所述关系表的字段包括:监控对象的标识ObjID、监控对象的具体类型ObjType、部署者DeployedBy、部署时间DepoyedTime、监控对象的宿主对象HostObj、监控对象的采样数据序列Samplings;
4)建立所述两层存储架构的全局时空分布式索引和全局关键字分布式索引。
进一步的,所述统一的形式为:svalue=(t,(x,y),schema,value);其中,t为采样时间,(x,y)采样地点;schema为采样数据所包含的数据项以及各数据项的数据类型,value为具体的采样数据值;如果schema和value包含多个分量,则用括号对分量的边界进行划分。
进一步的,所述监控对象包括静止监控对象和移动监控对象;所述传感器的采样数据的数据格式为:(objID,staticMov,svalue),其中,objID是监控对象的标识,staticMov标明监控对象是静止的还是移动的。
进一步的,按照时间顺序存储同一监控对象的n次采样值,所述移动监控对象采样数据序列的存储形式为: 所述静止监控对象采样数据序列的存储形式为: 其中,ti是第i个采样值的采样时间、(xi,yi)第i个采样值的采样地点、valuei第i个采样值的实际采样数值,flagi表示第i个采样值是否为该数据序列中的一个间断点。
进一步的,对每一移动监控对象mObj建立一个集合nodes(mObj),用于记录该mObj在监控时间范围内其所经过管辖区域的所有叶结点。
进一步的,如果一移动监控对象在监控时间内经过多个管辖区域,即同一移动监控对象mObj对应多个元组,nodes(mObj)中每个叶结点存储其中一个元组,则该移动监控对象mObj在不同叶结点中的元组的属性值ObjID、ObjType、DeployedBy、DepoyedTime、HostObj是相互复制的,而其Samplings属性值则在nodes(mObj)中的各叶结点之间进行分割。
进一步的,分割Samplings属性值的方法为:采用插值计算方法,计算出nodes(mObj)中相邻两个叶结点管辖区域边界的采样值,并将该采样值分别发送给两个管辖区域对应的叶结点进行存储。
进一步的,任意两个不同的叶子结点的管辖区域均不相交,所有叶结点的管辖区域并集为设定的总的地理区域。
进一步的,所述全局时空分布式索引为分布式全局关键字B+树索引,其为一三层结构,其中第一层为存放在根结点的所述全局关键字分区表,第二层为叶结点中的关键字到叶结点标识的映射B+树,第三层为存放在各个叶结点中的本地数据元组全文关键字索引;所述全局关键字分布式索引为一两层结构,其中,第一层是存放在根结点上的所述管辖区域分区表;第二层是各个叶结点上的传感器采样数据序列时空索引树S4T-Tree;所述S4T-Tree一用以对静止监控对象的空间位置进行索引的空间R树,一用于对移动监控对象的随时间动态变化的位置进行索引的格栅概略化时空R树。
进一步的,所述映射B+树的创建方法为:每个叶结点从自己的本地元组中提取关键字,并对每个关键字生成一个(keyword,nodeID)偶对;随后,该叶结点根据所述全局关键字分区表将各个偶对发送给相应的叶结点,然后每个叶结点根据收到一组来自于其他各个叶结点的(keyword,nodeID)集合构建所述映射B+树;所述全文关键字索引中叶结点记录格式为(keyword,Set(tupleID));所述管辖区域分区表中的记录的格式为:(area,nodeID);所述格栅概略化时空R树的建立方法为:首先将时空三维空间划分成设定粒度的等距格栅,然后将每个移动监控对象的轨迹映射成对应的概略化轨迹单元,所述概略化轨迹单元是原始轨迹所穿过的格栅单元的中心点连线,最后对概略化轨迹单元进行R树索引,从而建立格栅概略化时空R树;其中,keyword是一个关键字,set(tupID)是所有包含某关键字的所有元组的标识集合,nodeID为叶结点的标识,area为一个地理区域。
一种海量传感器数据存储数据的查询方法,其步骤为:
a)根结点判断接收的查询条件的查询类型;
b)如果是关键字查询,则根结点将调用全局关键字索引来得到查询结果;
c)如果是时空查询,则根结点将调用全局时空索引来得到查询结果,即首先检查管辖区域分区表,得到管辖区域与查询条件中指定的空间区域相交的叶结点,然后将查询条件发送给这些叶结点并行执行;根结点汇总各叶结点的查询结果并返回给查询用户。
进一步的,所述根结点中提供下列一个或多个操作:
针对采样数据序列SamplingSequence数据类型的查询操作:atInstant操作,
空间投影操作sProjectLines、sProjectPoints和时间投影操作sProjectTime;空间截取操作sTruncateGeo,时间截取操作sTruncateTime,新采样数据插入操作samplingAppend;
对采样值的投影操作vProjectTime和vProjectPoint,以及数据提取操作getComponent,其中,
atInstant操作的实现方法为:如果输入时间t正好为采样数据序列中某个关键采样值所对应的时间,即t=tj,j∈[1,n],则直接将该关键采样值(tj,(xj,yj),schema,valuej)作为结果返回;如果tj-1<t<tj,j∈[2,n],且第j个采样值为间断点,则返回未定义;如果不是间断点,则通过插值方法得到t时刻的结果;如果t<t1,则直接返回未定义;如果t>tn,则返回(tn,(xn,yn),schema,valuen);
sProjectLines操作为针对移动监控对象的采样数据序列向空间平面上投影,如果不满足则返回未定义;
sProjectPoints操作为针对静止监控对象的采样数据序列向空间平面上投影,如果不满足则返回未定义;
sProjectTime操作为将采样数据序列向时间轴上投影,如果不满足则返回未定义;
sTruncateGeo操作为根据给定的空间范围截取采样数据序列的一部分;
sTruncateTime操作为根据给定的时间范围截取采样数据序列的一部分;
samplingAppend操作为将一个新的采样值附加到采样数据序列的末尾,同时根据预定义的监控时间长度淘汰采样数据序列中过时的采样数据;
vProjectTime操作为提取采样值对应的时间;
vProjectPoint操作为提取采样值对应的地点;
getComponent操作为提取采样值的某个指定的分量;
其中,采样数据序列 ti是第i个采样值的采样时间、(xi,yi)第i个采样值的采样地点、valuei第i个采样值的实际采样数值,schema为采样数据所包含的数据项以及各数据项的数据类型,flagi表示第i个采样值是否为该数据序列中的一个间断点,n为采样数据序列的采样次数。
本发明的主要内容为:
(1)针对传感器采样数据的异构性、时空相关性、动态上传性,设计并实现了适用于传感器采样数据的专门的数据类型与查询操作,进而构成了传感器时空数据库模型。在传感器时空数据库中,将同一个监控对象的历次传感器采样数据组织成采样数据序列,并存放在同一个元组中,通过查询操作进行时空计算,从而实现传感器采样数据的存储、复杂计算与查询处理。监控对象与传感器相对应,根据它们的位置是否发生变化,可以分为静止监控对象(如太湖中的水温传感器)和移动监控对象(如车辆上的GPS传感器)。
(2)针对传感器采样数据的海量性,设计并实现了传感器时空数据库集群方法,通过将大量的传感器时空数据库组织成集群,并在此基础上通过全局关键字索引、全局时空索引以及全局查询处理机制,可以同时支持快速的时空查询和关键字查询。
与现有技术相比,本发明的积极效果为:
(1)提出了一种能够同时支持“键-值”查询和普通SQL查询的传感器数据库集群框架。通过在关系数据库集群的基础上建立分布式的全局关键字索引及全局关键字查询处理机制,使得传感器数据库集群可以兼容多种查询类型的快速处理,突破了目前云数据管理技术主要针对“键-值”查询、并行数据库技术主要针对SQL查询的局限。
(2)提出了一种能够应对传感器采样数据的异构性、时空相关性和动态流式特性的传感器时空数据库模型。通过采样数据序列等数据类型和相应的查询操作,在数据库内核一级实现了传感器采样数据的统一表示、存储、计算和查询,突破了目前时空数据库主要针对静态的空间数据或相对单一的时空数据、缺乏有效的异构数据流表示方法的局限。
(3)提出了一种地理区域敏感的传感器采样数据分布策略,并在此基础上提出了一种分布式的全局时空索引和全局时空查询处理方法,突破了目前时空数据库主要针对单机环境、缺乏时空数据库集群相关方法的局限。
附图说明
图1是STDB-KV存储系统的体系结构;
图2是传感器采样数据序列在各叶子结点之间的数据分割及分布的示意图;
图3分布式全局关键字索引GFTKB+-Tree的结构;
图4是格栅概略化时空R树GSSTR-Tree的结构;
图5是STDB-KV存储方法的查询处理流程示意图。
具体实施方式
下面分四个部分阐述本发明的主要内容。
1.STDB-KV存储方法的总体系统结构
在传感器海量数据管理系统(如物联网系统、传感器监控系统)中,数据中心通常需要对海量传感器采集的数据进行实时的存储和查询处理。为了保证系统的快速查询处理性能,我们可以通过STDB-KV存储方法,将大量的传感器时空数据库结点组织成一个协同工作的集群存储系统。STDB-KV存储系统的体系结构如图1所示。
如图1所示,STDB-KV存储系统是一个数据库集群系统。在STDB-KV存储系统中,所有的数据库结点(包括根结点和各个叶结点)均为传感器时空数据库(见下面“2.传感器时空数据库中的数据类型与查询操作”),传感器时空数据库不仅保留了关系数据库的全部功能,而且还通过专门针对传感器采样数据设计的数据类型、查询操作和时空索引等方式,提供对传感器采样数据存储和时空计算查询的支持。传感器时空数据库可以通过以下两种方式得到:
(1)在开放源代码的数据库管理系统的基础上,通过在内核中增加第2节所定义的数据类型和查询操作得到;
(2)在允许用户自定义数据类型和查询操作的商用数据库的基础上,通过在系统开放给用户的接口中增加第2节所定义的数据类型和查询操作得到。
STDB-KV存储系统采用两层架构,其中叶结点存储真正的传感器采样数据,而根结点则存储为了进行全局查询所需要的全局数据字典。全局数据字典主要包括第3.1节中提到的“管辖区域分区表”和第3.2.1节中提到的“全局关键字分区表”。所有的查询均提交给根结点,根结点通过全局查询处理模块,实现对查询的全局处理。在STDB-KV存储系统中,通过建立分布式的全局关键字索引(详见第3.2.1节)和全局时空索引(详见第3.2.2节),整个系统可以同时支持快速的关键字查询和时空查询。
2.传感器时空数据库中的数据类型与查询操作
在本部分,我们阐述在单个传感器时空数据库结点中,如何使用统一的数据库表示方式,对异构的传感器采样数据进行存储与查询处理。我们设数据库中已经实现了标准数据类型、空间数据类型等基本数据类型以及基于这些数据类型的相关查询操作。
在传感器时空数据库中,通过针对传感器采样数据专门设计的数据类型(详见第2.1节)和查询操作(详见第2.2节),可以允许各种异构的传感器结点的接入并上传异构的采样数据。每一种类型的传感器所上传的采样数据均可以具有不同的数据格式,但它们的共同特点是均具有时空特性:即每个传感器采样数据均对应于一个具体的采样时间t∈Instant和一个具体的采集地点(x,y)∈Point。此外,为了支持对同一个传感器历次采样值的集中提取和插值计算,传感器采样数据需要以监控对象为单位进行组织,表现出序列性和动态变化的流式特性。
所谓监控对象是指传感器所监控的各种物理目标。在绝大多数情况下,一个监控对象即对应于一个传感器(如太湖中的一个温度传感器可看成是一个监控对象,对应于一个具体的温度监测点,因此太湖中可包含大量的监控对象);但某些时候二者并不具有一一对应的关系,例如RFID传感器与所监控的车辆或货物之间并没有固定的对应关系-带有RFID标签的监控对象的采样数据序列是由整个系统中的多个RFID传感器所采集的数据汇总而成的。
根据监控对象的位置是否移动,我们可以将它们分为两大类:静止监控对象(如太湖中固定布设的温度传感器、车库中的剩余车位计数器等)和移动监控对象(如带GPS、RFID标签、条形码的车辆与货物等)。
为了对异构传感器流式时空相关数据进行有效的管理,我们通过下面将要定义的新数据类型和查询操作等,实现对传感器采样数据的统一管理。其中,数据类型规定了传感器采样数据在数据库中的表示及存储方式,使得数据库定义语言(DDL)中可以直接使用这些新的数据类型(见前文中Create Table语句所建立的数据库模式),而查询操作则使得新的数据类型可以在数据库操作语言(DML)中直接被解析(见第4节中的查询例子Q1~Q5)。DDL和DML通常采用目前关系数据库通用的SQL格式,因此本发明中也沿用SQL语言的格式。
为了方面阐述,我们假设数据库已经能够支持标准数据类型(如Int、Bool、Real、String、Instant等)、空间数据类型(如Point、Polyline、Region等)以及基于它们的查询操作(如+、-、*、/、>、<、=、distance、overlap、intersect等),而集中讨论与传感器采样数据有关的数据类型和查询操作。
此外,本部分主要介绍传感器时空数据库中的数据类型和查询操作,而数据索引统一放到第3节中的全局索引中进行说明。
2.1传感器采样数据类型
在本小节,我们首先定义传感器单个采样数据的表示方法,在此基础上,给出监控对象的采样数据序列的表示方法。通过这些数据类型,数据库内核可以对异构的传感器采样数据流进行统一的表示与存储处理。
在传感器时空数据库结点中,同一个监控对象(如气象传感器、温度传感器、物流车辆GPS传感器等)的历次采样值是存放在一起的,它们构成一个采样数据序列,反映被监控对象的状态随时间变化的完整过程。数据序列被定义成单独的数据类型(见定义3),因此同一监控对象的多个采样数据所构成的数据序列是集中存放的,仅占据数据库中的一条记录,从而提高了处理的效率。
在传感器采样值及采样数据序列的定义中,我们通过引入类型描述(见定义1中的“schema”),使得所有不同类型的传感器采样数据可以以统一的形式进行表示。
定义1(传感器采样值)传感器的单个采样值SamplingValue可以表示为如下形式:
SamplingValue=(t,(x,y),schema,value)
其中,t∈Instant和(x,y)∈Point分别是该采样值所对应的采样时间和采样地点;schema∈String和value∈String分别是采样数据的“型”和“值”,其中“型”描述了采样数据所包含的数据项以及各数据项的数据类型,“值”是具体的采样数据值。由于采样值可能包含多个分量,因此需要用括号对分量的边界进行划分。例如,第4节中给出了风速风向传感器采样值的例子,该采样值的型为:“(windspeed:real)(winddir:real)”,值为“(62.5)(22)”。
传感器的采样值可以由多个分量组成。为了进一步表示传感器采样值的分量,我们定义如下SamplingComponent数据类型。
定义2(采样值的分量)传感器采样值的分量SamplingComponent可以表示为如下形式:
SamplingComponent=(cSchema,cValue)
其中,cSchema∈String,cValue∈String分别是采样值分量的“型”和“值”。
定义3(采样数据序列)同一个监控对象的历次采样值(可以来自于同一个传感器,也可以来自于多个传感器)按照时间序列存放在一起,构成该对象的“采样数据序列(SamplingSequence)”,表示为如下形式:
其中,schema∈String是采样序列中各采样值的“型”,ti∈Instant、(xi,yi)∈Point和valuei∈String分别是第i个采样值的采样时间、采样地点以及实际的采样数值,flagi∈Bool表示第i个采样值是否为该数据序列中的一个“间断点”,即一个新片断的起点。
下面让我们来进一步讨论flagi。在STDB-KV存储系统中,数据是根据地理区域进行分布的(详见第3.1节)。对于移动监控对象来说,其采样数据序列可以被分割成多个片段,并被存储在不同的数据库结点中,而flagi则用于表示对应的采样值是否为一个新片段的起点。
对于静止监控对象,尽管不存在采样数据序列分割的问题,但flagi仍然是需要的,可用于表示监控过程被暂时挂起的情况,flagi仍为该数据序列中的一个“间断点”。由于静止监控对象的位置保持不变,此时SamplingSequence的格式可以简化为:
静止监控对象和移动监控对象的采样数据序列在格式上稍有区别,由数据库系统自动进行区分和处理。
在系统实现时,SamplingSequence数据类型被设计成一个指向外存文件数据块的指针,真实的采样数据序列被存放在文件块中,而不是直接存放在元组中。这样当新的采样数据到来并淘汰旧的采样数据时,只需要直接修改文件数据块即可,而不需要对数据库元组进行修改,从而提高了处理的效率。
注意,上述数据类型使得数据库的DDL可以直接地表示传感器数据类型,例如通过上述数据类型,我们可以建立关系表用以表示和存储传感器网及物联网中各监控对象的采样数据序列,如:
CREATE TABLE IoTData(ObjID:String,ObjType:String,DeployedBy:String,DepoyedTime:Instant,HostObj:String,Samplings:SamplingSequence);
在上述关系表模式中,ObjID、ObjType、DeployedBy、DepoyedTime分别是监控对象的标识、监控对象的具体类型(如GPS、RFID、摄像识别传感器、温度传感器等)、部署者、部署时间,HostObj是该监控对象的宿主对象(如太湖中的传感器的宿主对象为太湖),Samplings是该监控对象的采样数据序列。
在传感器时空数据库中,为了支持对本地数据的快速存取,需要建立若干基于本地数据的索引。这些索引分为两类:
(1)属性索引,即建立在IoTData表上的除了采样序列之外的各个属性(即ObjID,ObjType,DeployedBy,DepoyedTime,HostObj)上的索引。这类索引可以通过调用数据库系统提供的“Create Index On”语句建立;
(2)本地数据元组全文关键字索引(LFTKB+-Tree)和传感器采样数据序列索引树(S4T-Tree)。这类索引虽然是针对本地数据的,但它们是属于全局索引的一部分,因此我们在第3.2节中再对它们进行详细讨论。
2.2传感器数据的查询操作
上述数据类型允许我们在数据库内核中以统一的数据格式表示异构的传感器采样数据序列,并使得数据库定义语言(DDL)可以直接地使用这些传感器数据类型。但是为了对传感器数据进行查询和计算,我们还需要在这些数据类型的基础上建立一系列的查询操作。
本节中所定义的每个查询操作均需要在数据库内核中通过编程实现相应的操作函数,并将该操作函数登记在数据库系统的操作列表中。按照本发明中规定的各操作的语义以及输入、输出参数,操作的编程实现是相对简单的。例如,atInstant操作用于计算监控对象在某个给定时间t的状态值,该操作的输入分别为一个SamplingSequence型的值(设为sequ)和一个Instant型的值(设为t),输出一个SamplingValue型的值(设为sv)。在编程实现时,只需要将sequ视为多维状态空间中的一条折线,通过插值计算的方法计算出t时刻所对应的折线上的点,即可得到输出结果sv。
查询操作使得数据库操作语言(DML)可以对新定义的传感器数据类型进行计算、解析和操纵。虽然DDL和DML统称为数据库的查询语言,但是按照功能来说,DML实际包括查询和修改(含增、删、改)两大功能。
2.2.1针对SamplingSequence数据类型的操作
针对SamplingSequence数据类型的最重要的查询操作是atInstant操作,该操作计算监控对象在某个给定时间t的状态值,其语法格式如下(在操作的语法格式定义中,符号“→”两边分别是该操作的输入数据和输出数据的数据类型;如果操作有多个输入数据,则输入数据类型之间用“×”进行连接):
atInstant:SamplingSequence×Instant→SamplingValue
假设atInstant操作的两个输入分别是sequ∈SamplingSequence和t∈Instant,即查询条件是sequ和t,其中 如果t正好为某个关键采样值所对应的时间,即t=tj(j∈[1,n]),则atInstant操作直接将该关键采样值(tj,(xj,yj),schema,valuej)作为结果返回;如果tj-1<t<tj(j∈[2,n]),则需要进一步检查flagj:如果flagj=True,则表明第j个采样值为间断点,此时返回“未定义”(用“⊥”表示);如果flagj=False,则需要通过插值的方法得到t时刻的结果。如果t<t1,则直接返回“⊥”;如果t>tn,则返回(tn,(xn,yn),schema,valuen)(注意,此时返回值中用的是tn而不是t,用以表明采样的实际时间)。通过atInstant操作,数据库可以支持监控对象在监控时间段内任意时刻的状态查询。
为了提取采样数据序列的时空属性,支持复杂时空约束条件的表达,使得查询语句可以表示复杂的约束条件,我们还需要定义投影操作。空间投影操作sProjectLines、sProjectPoints和时间投影操作sProjectTime分别将采样数据序列向空间平面和时间轴上投影,它们的语法格式如下:
sProjectLines:SamplingSequence→Lines(针对移动监控对象)
sProjectPoint:SamplingSequence→Point(针对静止监控对象)
sProjectTime:SamplingSequence→Periods
在上述空间投影操作中,sProjectLines和sProjectPoints分别针对移动监控对象和静止监控对象,如果上述条件不满足,则返回“⊥”。
空间截取操作sTruncateGeo和时间截取操作sTruncateTime分别根据给定的空间范围和时间范围截取采样数据序列的一部分,它们的语法格式如下:
sTruncateGeo:SamplingSequence×Region→SamplingSequence
sTruncateTime:SamplingSequence×Periods→SamplingSequence
上述这些操作的实现需要在数据库内核编制程序。例如时间投影操作sProjectTime可以如下实现:如果只考虑时空属性,采样数据序列可以看成是时空三维空间(即X×Y×T空间)中的一条曲线,将该曲线向时间轴进行投影(取出每个曲线段的开始时间和结束时间,构成一个时间段。整个采样数据序列可以包含多个曲线段,因此其投影可以包括多个时间段,所以sProjectTime的结果是Periods型的值),即可得到所需要的结果。
为了支持新采样值到采样数据序列的插入,我们定义samplingAppend操作。该操作将一个新的采样值(连同表示是否为间断点的标识)附加到采样数据序列的末尾,同时根据系统中预定义的监控时间长度(如3个月)淘汰采样数据序列中过时的采样数据。该操作的语法格式如下:
samplingAppend:SamplingSequence×SamplingValue×Bool→SamplingSequence
2.2.2针对SamplingValue数据类型的操作
针对SamplingValue的操作主要包括对采样值的投影操作vProjectTime和vProjectPoint,以及数据提取操作getComponent。它们的语法格式如下:
vProjectTime:SamplingValue→Instant
vProjectPoint:SamplingValue→Point
getComponent:SamplingValue×integer→SamplingComponent
如果将SamplingSequence看成监控对象的状态曲线,则SamplingValue型的值实际上对应于监控对象状态曲线中的一个点。因此,vProjectTime、和vProjectPoint操作的结果分别是Instant和Point型的值。在实现这些操作的相关操作函数时,只需要取出SamplingValue型的值中所包含的时间、地点即可。
由于SamplingValue型的值可以有多个分量,getComponent操作根据指定的分量序号i,取出采样值的第i个分量。
2.2.3其他操作
为了实现SamplingComponent数据类型与数据库中其他数据类型的交互操作,还需要对数据库中的各种标准查询操作(如+、-、×、/、<、=、>等)和空间查询操作(如inside,intersect,touches,distance,direction,overlap等)进行扩充,使得SamplingComponent可以作为这些操作的输入数据类型参与这些操作的计算。例如,“=”操作在扩充之后的语法格式为(设“BASE”和“SPATIAL”分别是标准数据类型的集合和空间数据类型的集合):
=:α×β→Bool
其中α,β∈{samplingComponent}∪BASE∪SPATIAL。
此外,在STDB-KV存储系统中,所有的查询均是以SQL语句的格式提交的,即便对于关键字查询也套用SQL语句的格式。为此,我们定义如下keySearch操作,以提供关键字查询接口:
keySearch:string→set(tuple)
注意,所有的上述操作均与查询有关,它们使得数据库的DML可以使用这些操作对第2.1节中定义的新数据类型进行各种查询和修改,使得查询用户的各种约束条件及查询需求可以在查询语句中得以表达。具体例子请见第4节。
3.将多个传感器时空数据库组成STDB-KV数据库集群的方法
3.1全局数据分布策略
在第2节,我们讲述了单个传感器时空数据库是如何表示、存储和查询传感器采样数据的。在本节,我们讨论如何在多个传感器时空数据库所构成的集群中,如何分配和分布存储传感器的数据。
在STDB-KV存储系统中,所有新的采样值均被发送给采样数据接收服务器(见图1)。由采样数据接收服务器按照下面描述的规则进行多个结点之间数据的分配。在下面的讨论中,我们假设数据库的模式(schema)如前面Create Table语句所描述。
在STDB-KV存储系统中,每个叶结点node对应于一个地理区域,称之为该结点的“管辖区域”,记为α(node)。所有叶结点的管辖区域形成“管辖区域分区表(Service Area PartitioningTable,简称SAP-Table)”,并存放在根结点和采样数据接收服务器中。
设STDB-KV存储系统包含n个叶结点:node1,node2,...,noden,且总的应用地理区域为A,则有如下条件成立:
上述条件(1)的含义是:任意两个不同的叶子结点的管辖区域均不相交;条件(2)的含义是:所有叶子结点的管辖区域的并集构成整个应用地理区域A。通过上述两个条件可以看出,所有叶子结点的管辖区域是对总应用地理区域的一个划分。
各个监控对象的元组是根据它们的空间属性分布在不同的叶结点中的。对于静止监控对象,由于它们的位置不发生变化,因此每个对象仅对应于一个元组,且该元组存放在管辖区域包含该监控对象的叶结点中。
对于移动监控对象的数据分布要稍微复杂一些。设mObj是任意一个移动监控对象,nodes(mObj)是一个集合,该集合中包含所有mObj在监控时间范围内其所经过管辖区域的所有叶结点。在实际存储时,mObj对应于多个元组,nodes(mObj)中的每个叶结点中存放其中的一个元组,这些元组除了监控对象的采样数据序列的属性(即“Samplings”属性)之外的其他属性值(ObjID、ObjType、DeployedBy、DepoyedTime、HostObj)是相互复制的,而其“Samplings”属性值则在nodes(mObj)中的各叶结点之间进行分割:对于任意一个叶结点node,它仅存放“Samplings”的采样值中,实际在该叶结点管辖区域内所采集的采样值。图2给出了“Samplings”属性值在多个叶结点之间分割及进行数据分布的例子(为了简化叙述,我们设系统中仅包含4个叶结点)。
如图2所示,移动监控对象的“Samplings”属性值被分割成了3个片断(每个片断仍然为SamplingSequence数据类型),这些片断分别存放在node4、node1和node2中。在分割“Samplings”属性值的时候,需要进行相应的插值计算,计算出相邻两个管辖区域边界的采样值,并将该采样值分别发送给两个管辖区域对应的叶结点进行存储。
在STDB-KV存储系统中,所有新的采样值均被发送给采样数据接收服务器(见图1),采样数据接收服务器根据SAP-Table将采样数据值发送给不同的叶结点进行存储。如果新的采样值属于移动监控对象且与上次采样值相比跨越了不同叶结点的管辖区域,则采样数据接收服务器需要进行插值计算,并将插值点也发送给被跨越的两个管辖区域所对应的叶结点进行存储。
3.2全局分布式索引及全局查询处理
为了支持全局查询处理,在STDB-KV存储系统中需要建立相应的全局分布式索引。全局分布式索引的目的是支持快速的关键字查询和时空约束条件查询。
其实,在每个传感器时空数据库中,也需要建立本地数据的索引。但是在STDB-KV存储系统中,整个系统的索引可以看成一个整体,本地索引是全局索引的一部分,所以我们在本节对索引技术进行集中的讨论。
STDB-KV存储系统中的索引包括全局关键字索引和全局时空索引。
3.2.1全局关键字分布式索引与全局关键字查询
为了在STDB-KV存储系统中对关键字快速查询进行支持,需要建立一个分布式的全局关键字B+树索引(Global Full-Text Keyword B+-Tree,简称GFTKB+-Tree)。GFTKB+-Tree是由STDB-KV存储系统的根结点和各个叶结点共同建立的针对整个系统的分布式关键字索引。图3给出了全局关键字B+树索引GFTKB+-Tree的结构。
如图3所示,GFTKB+-Tree实际上是一个三层结构,其中:
第一层是一个存放在STDB-KV存储系统根结点的全局关键字分区表(Global KeywordRange Table,简称GKR-Table)。GKR-Table的记录格式为(keyRange,nodeID),其中keyRange是关键字值域中的一个区域范围,nodeID是与该范围相对应的叶结点的标识(该叶结点中的KNMB+-Tree索引该范围内的关键字);
第二层是存放在STDB-KV存储系统叶结点中的keyword到nodeID的映射B+树(keyword-to-NodeID Mapping B+-Tree,简称KNMB+-Tree)。KNMB+-Tree的叶结点记录格式为(keyword,set(nodeID)),其中keyword是关键字,set(nodeID)是所有包含该关键字的叶结点的标识的集合。在创建KNMB+-Tree时,每个叶结点从自己的本地元组中提取关键字,并对每个关键字生成一个(keyword,nodeID)偶对(其中nodeID即为该叶结点自己的标识);随后,该叶结点根据GKR-Table将各个偶对发送给相应的叶结点,这样每个叶结点可以收到一组来自于整个系统中其他各个叶结点的(keyword,nodeID)集合,并在此基础上构建KNMB+-Tree;
第三层是存放在STDB-KV存储系统的各个叶结点中的本地数据元组全文关键字索引(Local Full-Text Keyword B+-Tree,简称LFTKB+-Tree)。LFTKB+-Tree是STDB-KV存储系统针对本地数据建立的全文关键字索引。LFTKB+-Tree叶结点记录格式为(keyword,Set(tupleID)),其中keyword是一个关键字,set(tupID)是所有包含该关键字的所有元组的标识集合。
在进行查询处理时,STDB-KV存储系统中的所有查询均发送给根结点进行处理。当根结点接收到一个关键字查询时,将首先查询GKR-Table,从而判断应该进一步查询哪个叶结点的KNMB+-Tree;然后,根据对应叶结点的KNMB+-Tree,可以得到一组叶结点的nodeID,这些叶结点均包含被查询的关键字;最后,根结点将查询广播给这些叶结点并行执行,执行结果由根结点最后返回给查询用户。各叶结点在执行来自于根结点的关键字查询时,可以调用本地的LFTKB+-Tree快速地得到查询结果。
对于属性约束条件查询(根据某个属性的值来进行查询,如第4节中的查询Q3),尽管不是关键字查询,但是仍然可以通过GFTKB+-Tree的上两层(即GKR-Table和KNMB+-Tree)缩小需要查询的叶结点范围,然后再在各相关叶结点上执行对应的SQL语句。在执行SQL语句时,各叶结点虽然不能调用本地的LFTKB+-Tree,但通过在各属性上建立的属性索引(见第2.1节)仍然可以获得较快的查询速度。
3.2.2全局时空分布式索引与全局时空查询处理
除了关键字查询之外,物联网系统和传感器监控系统中的另一类重要的查询类型是带有时空约束条件的查询,如“查询北京市区域A中所有空气质量传感器在时刻t的采样值”。为了支持这类查询,我们还需要建立全局时空R树索引(Global Spatial-Temporal R-Tree,简称GSTR-Tree)。
在STDB-KV存储系统中,数据是根据其空间属性进行分布的(见第3.1节),因此全局时空索引GSTR-Tree的构建得到了简化。GSTR-Tree是一个分布式索引,采用两层的结构,其中:
第一层是STDB-KV存储系统的根结点上的管辖区域分区表(SAP-Table,如3.1节所述)。SAP-Table中的记录的格式为:(area,nodeID),其中area为一个地理区域,nodeID是以该区域为服务区域的叶子结点标识;
第二层是STDB-KV存储系统的各个叶结点上的“传感器采样数据序列时空索引树(Sensor-Sampling-Sequence Spatial-Temporal Tree,简称S4T-Tree)”。在STDB-KV系统中,每个叶子结点有一个S4T-Tree,用于对该结点中的采样数据序列的时空属性进行索引。S4T-Tree实际上包括两个子树:一个标准的空间R树用以对静止监控对象的空间位置进行索引,一个格栅概略化时空R树(Grid-Sketched Spatial-Temporal R-Tree,简称GSSTR-Tree,见下面描述)用于对移动监控对象的随时间动态变化的位置(亦称为“时空轨迹-trajectory”)进行索引。图4给出了格栅概略化时空R树GSSTR-Tree的结构。GSSTR-Tree的技术要点如下:
在传感器系统中,移动监控对象时空轨迹的变化是十分频繁的,因为每一次新采样值的到来均会导致向轨迹中插入新的轨迹单元(轨迹单元是轨迹时空曲线中相邻两个采样点构成的一条直线段)。如果直接以轨迹单元作为索引记录的基本单位,则索引的更新频率将等同于采样数据插入数据库的频率,从而导致巨大的索引更新代价。为了克服上述问题,我们首先将时空三维空间(即X×Y×T空间)划分成粒度较粗的等距格栅。然后,将每个移动监控对象的轨迹映射成对应的“概略化”轨迹,概略化轨迹单元是原始轨迹所穿过的格栅单元的中心点连线,因此其粒度比原始轨迹要大得多。最后对概略化轨迹单元进行R树索引,从而建立GSSTR-Tree。
GSSTR-Tree的叶结点记录的格式为(stu,set(tupleID)),其中stu是概略化轨迹单元,set(tupleID)是其概略化轨迹包含stu的所有移动监控对象元组标识的集合(注意,多个移动监控对象的概略化轨迹可以共享同一个轨迹单元)。概略化轨迹的变化频率比原始轨迹低得多,因此GSSTR-Tree有效地降低了索引更新的频率。
在进行时空查询处理时,如果是针对静止监控对象的查询,则根结点首先检查SAP-Table,看看哪些叶结点的管辖区域与查询条件中指定的空间区域相交,然后将查询发送给这些叶结点并行执行;叶结点在处理来自于根结点的查询请求时,可以通过本地的S4T-Tree快速地得到查询结果(仅需查询S4T-Tree的空间R树部分);各叶结点的查询结果由根结点汇总并返回给查询用户。
如果时空查询是针对移动对象的,则根结点需要首先检查SAP-Table,得到与查询条件中指定的空间区域相交的叶结点,然后将查询发送给这些叶结点并行执行;各叶结点在执行该查询时,通过时空约束条件对S4T-Tree的GSSTR-Tree部分进行搜索并快速得到查询结果;由于同一个移动监控对象的Samplings属性是根据所属区域分布在不同的叶结点上的,根结点收到各叶结点返回的结果之后,将最后的结果返回给查询用户。
3.2.3总体的全局查询处理方法
在STDB-KV存储系统中,所有的查询均是以SQL语句的方式提交给根结点的,不管它是关键字查询,还是时空约束条件查询。
在对这些查询进行处理时,根结点需要首先判断查询是关键字查询还是时空约束条件查询,并根据查询的类型进行不同的处理:
如果是关键字查询(如第4节中的查询Q1和Q2),则根结点将在全局关键字索引GFTKB+-Tree的基础上,通过关键字匹配得到查询结果。具体的查询过程如下:根结点首先查询GKR-Table,从而判断应该进一步查询哪个叶结点的KNMB+-Tree;然后,根据对应叶结点的KNMB+-Tree,可以得到一组叶结点的nodeID,这些叶结点均包含被查询的关键字;最后,根结点将查询广播给这些叶结点并行执行,执行结果由根结点最后返回给查询用户。各叶结点在执行来自于根结点的关键字查询时,可以调用本地的LFTKB+-Tree快速地得到查询结果;
如果是时空查询,则根结点将调用全局时空索引GSTR-Tree来得到查询结果,即首先检查SAP-Table,看看哪些叶结点的管辖区域与查询条件中指定的空间区域相交,然后将查询发送给这些叶结点并行执行;叶结点在处理来自于根结点的查询请求时,可以通过本地的S4T-Tree快速地得到查询结果;各叶结点的查询结果由根结点汇总并返回给查询用户;
对于属性约束条件查询(如第4节中的查询Q3),尽管不是关键字查询,但是仍然可以通过全局关键字分布式索引,即GFTKB+-Tree中的GKR-Table和KNMB+-Tree,来缩小需要查询的叶结点范围,然后再在各相关叶结点上执行对应的SQL语句(即查询语句)。在执行SQL语句时,叶结点不能调用本地的LFTKB+-Tree,但叶子结点通过属性索引(见第2.1节)仍然可以获得较快的查询速度。
STDB-KV存储系统的查询处理流程如图5所示。
3.3新采样数据触发的数据更新处理
在STDB-KV存储系统中,包含多个采样数据接收服务器,这些服务器组成一个集群,共同对传感器接入层上传的新采样值进行处理。
新采样值的数据格式为(objID,staticMov,svalue),其中objID是监控对象的标识,staticMov标明监控对象是静止的还是移动的,svalue=(t,(x,y),schema,value)是一个samplingValue类型的值。采样数据接收服务器接收到上述数据之后,首先判断staticMov,如果是静止监控对象,则可通过SAP-Table找到管辖区域包含(x,y)的叶结点,然后将采样数据转发给该叶结点进行处理;如果是移动监控对象,则需要进一步判断上次提交了采样值之后该监控对象是否跨越了叶结点的管辖区域边界,若是,则需要进行相应的插值计算,并将插值结果也发送给相应的叶结点。为此,采样数据接收服务器需要保存各移动监控对象上一次提交的采样数据值。
叶结点接收到新的采样数据之后,直接通过samplingAppend操作将之附加到相应监控对象的“Samplings”属性值中。
4.数据组织及查询的例子
表1给出了STDB-KV存储方法中,对各种传感器采样值进行统一表示的例子(注意其中的GPS所采集的经度、纬度信息是传感器采样值的基本信息,表示在loc属性中,所以并不属于采样值的分量)。
表1:传感器采样值的例子
在STDB-KV中定义的所有数据类型和查询操作均实现为数据库系统的内嵌形式,因此查询语言(包括数据定义语言DDL和数据操纵语言DML)是扩充后的SQL语言形式。下面给出一些查询的例子(这些例子基于前文Create Table语句所使用的数据库模式):
[查询Q1]通过关键字查询获得监控对象objID1的采样数据序列
SELECT keySearch(objIDl).Samplings
FROM IoTData;
在上述查询中,keySearch操作返回一组元组的集合(由于objID1只对应一个元组,因此该集合中只含一个元素),而keySearch(objID1).Samplings返回这些元组的“Saplings”属性值。
注意,这个查询虽然采用SQL的表达方式,但是实际上是关键字查询。当根结点接收到该查询时,将首先查询GKR-Table,从而判断应该进一步查询哪个叶结点的KNMB+-Tree;然后,根据对应叶结点的KNMB+-Tree,可以得到一组叶结点的nodeID,这些叶结点均包含被查询的关键字;最后,根结点将查询广播给这些叶结点并行执行,执行结果由根结点最后返回给查询用户。各叶结点在执行来自于根结点的关键字查询时,可以调用本地的LFTKB+-Tree快速地得到查询结果。
[查询Q2]通过关键字查询获得所有由“BeijingTraffic”部署的监控对象的采样数据序列
SELECT keySearch(“BeijingTraffic”).Samplings
FROM IoTData;
该查询表示出了关键字并不仅仅局限为监控对象的标识,而可以是任何关键字。原因是我们的全局关键字索引是基于全文关键字的。本例中,“BeijingTraffic”可以对应于多个叶子结点中的多个元组。该查询仍然属于关键字查询,其处理过程与查询Q1一致。
[查询Q3]通过属性约束条件实现查询Q2
SELECT Samplings
FROM IoTData
WHERE DeployedBy=“BeijingTraffic”;
本查询是一个属性条件查询,因此不能像Q2那样通过调用关键字索引来处理,而是需要在相应的叶子结点上执行SQL语句。尽管不是关键字查询,但是仍然可以通过GFTKB+-Tree中的GKR-Table和KNMB+-Tree缩小需要查询的叶结点范围,然后再在各相关叶结点上执行对应的SQL语句。各叶结点在执行SQL语句时不能调用本地的LFTKB+-Tree,而是通过标准的SQL执行过程得到查询结果。
[查询Q4]查询所有位于地理区域region1内且在t1时刻的温度大于50的温度监控对象,返回除了“Samplings”属性之外的其他属性值
SELECT ObjID,ObjType,DeployedBy,DepoyedTime,HostObj
FROM IoTData
WHERE ObjType=“Temperature”AND inside(sProjectPoint(Samplings),region1)AND
getComponent(atInstant(Samplings,tl),1)>50;
本查询是针对静止监控对象(温度传感器监控对象)的查询,其空间约束条件是inside(sProjectPoint(Samplings),region1)。在处理该查询时,根结点首先检查SAP-Table,看看哪些叶结点的管辖区域与region1相交,然后将查询发送给这些叶结点并行执行;叶结点在处理来自于根结点的查询请求时,可以通过本地的S4T-Tree快速地得到查询结果(仅需查询S4T-Tree的空间R树部分);各叶结点的查询结果由根结点汇总并返回给查询用户。
[查询Q5]查询所有t1时刻位于地理区域region1内的视频交通流监控移动目标(如安装在公交车辆上的摄像头)
SELECT*
FROM IoTData
WHERE ObjectType=“BusTrafficVideo”AND
inside(vProjectPoint(atInstant(Samplings,tl)),region1)
该查询是针对移动监控对象的查询,其时空约束条件为inside(vProjectPoint(atInstant(Samplings,t1)),region1)。在处理该查询时,根结点首先检查SAP-Table,得到与region1相交的叶结点,然后将Q5发送给这些叶结点并行执行;各叶结点在执行Q5时,通过时空约束条件对S4T-Tree的GSSTR-Tree部分进行搜索并快速得到查询结果;由于同一个移动监控对象的Samplings属性是根据所属区域分布在不同的叶结点上的,根结点收到各叶结点返回的结果之后,还需要进行必要的合并操作,并将最后的结果返回给查询用户。
以上通过实例对本发明进行了详细的描述,本领域的技术人员应当理解,在不超出本发明的精神和实质的范围内,对本发明做出一定的修改和变动,比如对传感器采样数据的具体表示格式进行修改,或对传感器时空数据库集群的组织方式进行局部修改,仍然可以实现本发明的目的。
Claims (11)
1.一种海量传感器数据存储方法,其步骤为:
1)建立一包括一根结点和若干叶结点的两层存储架构;其中,根结点存储一全局查询所需的全局数据字典,叶结点存储传感器采样数据;所述全局数据字典包括一管辖区域分区表和一全局关键字分区表;每一叶结点对应一管辖区域,所有叶结点的管辖区域
构成所述管辖区域分区表;所述全局关键字分区表的记录格式为(keyRange,nodeID),keyRange是关键字值域中的一个区域范围,nodeID是与该范围相对应的叶结点的标识;
2)采样数据接收服务器根据所述管辖区域分区表将传感器发送来的采样数据分配给相应的叶结点;
3)每一叶结点将传感器对同一监控对象的历次采样值以统一的形式存储到叶结点数据库的一个元组中,构成该监控对象的采样数据序列;其中,所述数据库采用关系表存储所述采样数据序列,所述关系表的字段包括:监控对象的标识ObjID、监控对象的具体类型ObjType、部署者DeployedBy、部署时间DepoyedTime、监控对象的宿主对象HostObj、监控对象的采样数据序列Samplings;
4)建立所述两层存储架构的全局时空分布式索引和全局关键字分布式索引;
其中,所述全局时空分布式索引为分布式全局关键字B+树索引,其为一三层结构,其中第一层为存放在根结点的所述全局关键字分区表,第二层为叶结点中的关键字到叶结点标识的映射B+树,第三层为存放在各个叶结点中的本地数据元组全文关键字索引;
所述全局关键字分布式索引为一两层结构,第一层是存放在根结点上的所述管辖区域分区表;第二层是各个叶结点上的传感器采样数据序列时空索引树S4T-Tree;所述S4T-Tree包括一用于对静止监控对象的空间位置进行索引的空间R树,一用于对移动监控对象的随时间动态变化的位置进行索引的格栅概略化时空R树。
2.如权利要求1所述的方法,其特征在于所述统一的形式为:svalue=(t,(x,y),schema,value);其中,t为采样时间,(x,y)采样地点;schema描述采样数据所包含的数据项以及各数据项的数据类型,value为具体的采样数据值;如果schema和value包含多个分量,则用括号对分量的边界进行划分。
3.如权利要求2所述的方法,其特征在于所述监控对象包括静止监控对象和移动监控对象;所述传感器的采样数据的数据格式为:(objID,staticMov,svalue),其中,objID是监控对象的标识,staticMov标明监控对象是静止的还是移动的。
4.如权利要求3所述的方法,其特征在于按照时间顺序存储同一监控对象的n次采样值,所述移动监控对象采样数据序列的存储形式为:SamplingSequence=(schema,((ti,(xi,yi),valuei,flagi))i n =1),所述静止监控对象采样数据序列的存储形式为:SamplingSequence=(schema,(x,y),((ti,valuei,flagi))i n =1);其中,ti是第i个采样值的采样时间、(xi,yi)第i个采样值的采样地点、valuei第i个采样值的实际采样数值,flagi表示第i个采样值是否为该数据序列中的一个间断点。
5.如权利要求3所述的方法,其特征在于对每一移动监控对象mObj建立一个集合nodes(mObj),用于记录该mObj在监控时间范围内其所经过管辖区域的所有叶结点。
6.如权利要求5所述的方法,其特征在于如果一移动监控对象在监控时间内经过多个管辖区域,即同一移动监控对象mObj对应多个元组,nodes(mObj)中每个叶结点存储其中一个元组,则该移动监控对象mObj在不同叶结点中的元组的属性值ObjID、ObjType、DeployedBy、DepoyedTime、HostObj是相互复制的,而其Samplings属性值则在nodes(mObj)中的各叶结点之间进行分割。
7.如权利要求6所述的方法,其特征在于分割Samplings属性值的方法为:采用插值计算方法,计算出nodes(mObj)中相邻两个叶结点管辖区域边界的采样值,并将该采样值分别发送给两个管辖区域对应的叶结点进行存储。
8.如权利要求1所述的方法,其特征在于任意两个不同的叶子结点的管辖区域均不相交,所有叶结点的管辖区域并集为设定的总的地理区域。
9.如权利要求1所述的方法,其特征在于所述映射B+树的创建方法为:每个叶结点从自己的本地元组中提取关键字,并对每个关键字生成一个(keyword,nodeID)偶对;随后,该叶结点根据所述全局关键字分区表将各个偶对发送给相应的叶结点,然后每个叶结点根据收到一组来自于其他各个叶结点的(keyword,nodeID)集合构建所述映射B+树;所述映射B+树中叶结点记录格式为(keyword,Set(tupleID));所述管辖区域分区表中的记录的格式为:(area,nodeID);所述格栅概略化时空R树的建立方法为:首先将时空三维空间划分成设定粒度的等距格栅,然后将每个移动监控对象的轨迹映射成对应的概略化轨迹单元,所述概略化轨迹单元是原始轨迹所穿过的格栅单元的中心点连线,最后对概略化轨迹单元进行R树索引,从而建立格栅概略化时空R树;其中,keyword是一个关键字,set(tupID)是所有包含某关键字的所有元组的标识集合,nodeID为叶结点的标识,area为一个地理区域。
10.一种对基于权利要求1所述存储方法存储数据的查询方法,其步骤为:
1)根结点判断接收的查询条件的查询类型;
2)如果是关键字查询,则根结点将调用全局关键字分布式索引来得到查询结果;
3)如果是时空查询,则根结点将调用全局时空分布式索引来得到查询结果,即首先检查管辖区域分区表,得到管辖区域与查询条件中指定的空间区域相交的叶结点,然后将查询条件发送给这些叶结点并行执行;根结点汇总各叶结点的查询结果并返回给查询用户。
11.如权利要求10所述的方法,其特征在于所述根结点中提供下列一个或多个操作:
针对采样数据序列SamplingSequence数据类型的查询操作:atInstant操作,
空间投影操作sProjectLines、sProjectPoints和时间投影操作sProjectTime;空间截取操作sTruncateGeo,时间截取操作sTruncateTime,新采样数据插入操作samplingAppend;
对采样值的投影操作vProjectTime和vProjectPoint,以及数据提取操作getComponent,其中,
atInstant操作的实现方法为:如果输入时间t正好为采样数据序列中某个关键采样值所对应的时间,即t=tj,j∈[1,n],则直接将该关键采样值(tj,(xj,yj),schema,valuej)作为结果返回;如果tj-1<t<tj,j∈[2,n],且第j个采样值为间断点,则返回未定义;如果不是间断点,则通过插值方法得到t时刻的结果;如果t<t1,则直接返回未定义;如果t>tn,则返回(tn,(xn,yn),schema,valuen);
sProjectLines操作为针对移动监控对象的采样数据序列向空间平面上投影,如果不满足则返回未定义;
sProjectPoints操作为针对静止监控对象的采样数据序列向空间平面上投影,如果不满足则返回未定义;
sProjectTime操作为将采样数据序列向时间轴上投影,如果不满足则返回未定义;
sTruncateGeo操作为根据给定的空间范围截取采样数据序列的一部分;
sTruncateTime操作为根据给定的时间范围截取采样数据序列的一部分;
samplingAppend操作为将一个新的采样值附加到采样数据序列的末尾,同时根据预定义的监控时间长度淘汰采样数据序列中过时的采样数据;
vProjectTime操作为提取采样值对应的时间;
vProjectPoint操作为提取采样值对应的地点;
getComponent操作为提取采样值的某个指定的分量;
其中,采样数据序列SamplingSequence=(schema,(ti,((xi,yi),valuei,flagi))i n =1),ti是第i个采样值的采样时间、(xi,yi)第i个采样值的采样地点、valuei第i个采样值的实际采样数值,schema描述采样数据所包含的数据项以及各数据项的数据类型,flagi表示第i个采样值是否为该数据序列中的一个间断点,n为采样数据序列的采样次数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210093419.7A CN102651020B (zh) | 2012-03-31 | 2012-03-31 | 一种海量传感器数据存储与查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210093419.7A CN102651020B (zh) | 2012-03-31 | 2012-03-31 | 一种海量传感器数据存储与查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102651020A CN102651020A (zh) | 2012-08-29 |
CN102651020B true CN102651020B (zh) | 2014-01-15 |
Family
ID=46693028
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210093419.7A Expired - Fee Related CN102651020B (zh) | 2012-03-31 | 2012-03-31 | 一种海量传感器数据存储与查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102651020B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102915346B (zh) * | 2012-09-26 | 2015-07-01 | 中国科学院软件研究所 | 面向物联网智能感知的数据索引建立与查询方法 |
CN103390015B (zh) * | 2013-01-16 | 2016-03-30 | 华北电力大学 | 基于统一索引的海量数据联合存储方法及检索方法 |
US10740358B2 (en) | 2013-04-11 | 2020-08-11 | Oracle International Corporation | Knowledge-intensive data processing system |
CN103425789B (zh) * | 2013-08-28 | 2016-12-07 | 深圳信息职业技术学院 | 一种时空数据的查询方法及装置 |
CN104142967B (zh) * | 2013-09-30 | 2017-11-03 | 国家电网公司 | 一种采样数据长度可调的触发方法 |
CN104750708B (zh) * | 2013-12-27 | 2018-09-28 | 华为技术有限公司 | 一种时空数据的索引建立方法、查询方法、装置及设备 |
CN103793469A (zh) * | 2013-12-30 | 2014-05-14 | 远光软件股份有限公司 | 一种数据查询统计方法及系统 |
CN104008212B (zh) * | 2014-06-23 | 2017-05-03 | 中国科学院重庆绿色智能技术研究院 | 一种地理位置信息相关联的物联网时间序列数据存取方法 |
US10001759B2 (en) * | 2014-08-11 | 2018-06-19 | Qualcomm Incorporated | Method and apparatus for automatically generating an events dictionary in an internet of things (IOT) network |
JP7064333B2 (ja) * | 2015-03-23 | 2022-05-10 | オラクル・インターナショナル・コーポレイション | 知識集約型データ処理システム |
CN106559634B (zh) * | 2015-09-30 | 2019-12-03 | 杭州海康威视数字技术股份有限公司 | 用于交通卡口视频监控的数据存储方法及装置 |
CN105426421A (zh) * | 2015-11-03 | 2016-03-23 | 武汉地大信息工程股份有限公司 | 一种时态监测数据快速可视化方法及系统 |
CN106776632A (zh) * | 2015-11-23 | 2017-05-31 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN105608155B (zh) * | 2015-12-17 | 2018-09-25 | 北京华油信通科技有限公司 | 海量数据分布式存储系统 |
CN105957148B (zh) * | 2016-05-20 | 2018-07-20 | 江苏得得空间信息科技有限公司 | 一种复杂三维建筑物模型的粒度均衡数据组织方法 |
CN106570466B (zh) * | 2016-11-01 | 2020-09-11 | 金鹏电子信息机器有限公司 | 视频分类方法及系统 |
CN106649668A (zh) * | 2016-12-14 | 2017-05-10 | 华南师范大学 | 一种基于向量模型的海量时空数据检索方法及系统 |
CN108319678A (zh) * | 2018-01-30 | 2018-07-24 | 复旦大学 | 一种海量时间序列的分布式索引方法 |
CN110377598B (zh) * | 2018-04-11 | 2023-04-07 | 西安邮电大学 | 一种基于智能制造过程的多源异构数据存储方法 |
CN110134683A (zh) * | 2019-04-23 | 2019-08-16 | 中国地质大学(武汉) | 关系数据库中海量要素存储的分区优化研究方法及系统 |
US11994863B2 (en) * | 2019-12-03 | 2024-05-28 | International Business Machines Corporation | Trajectory similarity search |
US11507557B2 (en) * | 2021-04-02 | 2022-11-22 | International Business Machines Corporation | Dynamic sampling of streaming data using finite memory |
CN116910595B (zh) * | 2023-09-14 | 2023-12-08 | 山东省地质矿产勘查开发局八〇一水文地质工程地质大队(山东省地矿工程勘察院) | 一种水工环生态修复数据的高效存储方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073719A (zh) * | 2011-01-10 | 2011-05-25 | 复旦大学 | 一种基于区间编码的gml文档索引方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8156107B2 (en) * | 2007-02-02 | 2012-04-10 | Teradata Us, Inc. | System and method for join-partitioning for local computability of query over shared-nothing clusters |
-
2012
- 2012-03-31 CN CN201210093419.7A patent/CN102651020B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073719A (zh) * | 2011-01-10 | 2011-05-25 | 复旦大学 | 一种基于区间编码的gml文档索引方法 |
Non-Patent Citations (2)
Title |
---|
丁治明等.网络受限移动对象过去、现在及将来位置的索引.《Journal of Software》.2009,第20卷(第12期),第3193-3204页. |
网络受限移动对象过去、现在及将来位置的索引;丁治明等;《Journal of Software》;20091231;第20卷(第12期);第3193-3204页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102651020A (zh) | 2012-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102651020B (zh) | 一种海量传感器数据存储与查询方法 | |
CN102915346B (zh) | 面向物联网智能感知的数据索引建立与查询方法 | |
CN102081669B (zh) | 多源遥感资源异构数据库的分级检索方法 | |
Karabegovic et al. | Geoportal as decision support system with spatial data warehouse | |
CN107533569A (zh) | 用于多维数据库环境中的沙箱支持的系统和方法 | |
KR101797207B1 (ko) | Udf 기반 이동객체 궤적 데이터 처리방법 | |
Gómez et al. | A data model and query language for spatio-temporal decision support | |
Pant et al. | A survey of spatio-temporal database research | |
Galić et al. | Geospatial data streams: Formal framework and implementation | |
Shekhar et al. | Benchmarking spatial big data | |
Marsit et al. | Query processing in mobile environments: A survey and open problems | |
Gómez et al. | A survey of spatio-temporal data warehousing | |
Pandey et al. | GIS: scope and benefits | |
Karabegovic et al. | Geoportal as interface for data warehouse and business intelligence information system | |
Laxmaiah et al. | A conceptual metadata framework for spatial data warehouse | |
Rashid et al. | Challenging issues of spatio-temporal data mining | |
KR102333994B1 (ko) | 교통 수집 데이터 제공 시스템의 교통 수집 데이터 제공 방법 | |
Derbal et al. | From spatial data warehouse and decision-making tool to SOLAP generalisation approach for efficient road risk analysis | |
Donko et al. | Implementation of tracking mobile application and analysis of spatial data | |
Gómez et al. | A state-of-the-art in spatio-temporal data warehousing, OLAP and mining | |
JPH0477869A (ja) | データベースシステムのマルチメデイアデータ処理方法 | |
Derbal et al. | Spatial data warehouse and geospatial decision making tool for efficient road risk analysis | |
Xiong et al. | A Web-based Platform for Visualizing Spatiotemporal Dynamics of Big Taxi Data | |
Mahmood et al. | Building spatio-temporal database model based on ontological approach using relational database environment | |
Ma et al. | Modeling spatiotemporal topological relationships between moving object trajectories along road networks based on region connection calculus |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140115 |
|
CF01 | Termination of patent right due to non-payment of annual fee |