时间:2022-12-21 12:30:01 | 来源:信息时代
时间:2022-12-21 12:30:01 来源:信息时代
感知查询语言 : 无线传感器数据管理系统TinyDB中一种基于SQL的查询语言,又称TinySQL。在TinyDB系统中,感知查询语句一般由SELECT-FROM-WHERE从句构成,其语法与SQL查询语句的语法类似。感知查询语言支持选择、连接、投影和聚集等基本操作,并且可以通过实例化来显式地实现抽样查询、区域查询和子查询。同时,感知查询语言还支持事件触发查询、基于无线传感器网络生命周期的查询,用户还可以设定采样频率、设定存储点以及自定义聚集函数。TinyDB中感知查询语言的语法结构如下:
SELECT select-list
[FROM sensors]/*[]表示里面内容为可选项*/
WHERE predicate
[GROUP BY gb-list
[HAVING predicate]]
[TRIGGER ACTION command-name [(param)]]
[EPOCH DURATION time]
其中,SELECT子句中select-list是无限虚拟关系中的属性列,可以是聚集函数; FROM子句指sensors源或存储表;WHERE子句和HAVING子句中predicate是条件谓词;GROUP BY子句中gb-list是属性列表;子句TRIGGER ACTION描述触发器,command-name是触发器命令,param是命令的参数,触发器子句指定当WHERE子句的条件满足时需要执行的命令; EPOCH DURATION定义了查询执行的周期,time是周期时间值。
在无线传感器网络中,感知查询语言作用在传感器节点产生的感知数据上。感知数据可以表示为一个四元组〈id,a,d,t〉。其中id表示传感器编号,a表示属性向量〈a1,…,an〉,d表示a对应的数据值向量〈d1,…,dn〉,t表示传感器节点获得数据的时间。其语义可表示为在t时刻id号传感器采集的ai属性的数据值为di。如编号为8的传感器节点在2005年11月22日12:00所感知的温度数据为2℃,那么就可以表示为〈8,Temperature,2,2005-11-2212:00〉这样的一个数据元组。
在TinyDB系统中,TinyDB数据模型是把传感器网络中的感知数据定义为一个虚拟关系。把一个感知数据元组看作关系的一个记录,每个感知数据属性作为一列,比如温度、湿度、光、压强等属性。还有一些描述感知数据的属性,如节点编号、感知时间等。当某些传感器节点缺少某些属性时,关系表允许在该属性分量上插入一个NULL。无线传感器网络感知的数据随时间动态变化,关系中的数据的存储一般都很短暂,它们很快就会被传送到网外。在无限虚拟关系上的操作和传统的关系上的操作基本一样,它们都支持选择、连接、投影等操作。
感知查询语言中定义了几种典型的查询,包括:
(1)聚集查询: TinyDB支持聚集查询,聚集查询可以被分派到无线传感器网络内部进行网内处理,不同的聚集函数决定了聚集查询的网内处理程度。下面是一个聚集查询的实例:
SELECT AVG(volume),room
FROM sensors WHERE floor=6
GROUP BY room
HAVING AVG(volume)〉threshold
SAMPLE PERIOD 30s
该感知查询指定查询6楼的传感器节点,报告所有平均音量大于给定阈值threshold的房间号,并且每30秒传递一次更新数据。查询持续运行直到用户注销系统。TinyDB中的感知查询与SQL查询的主要不同在于TinyDB的聚集查询的输出是数据流的形式,而不是一个单一的聚集值。对于这些流的查询,每组的每个聚集记录由一个数值对〈group-id,aggregate-value〉组成,group-id表示组的标识,aggregate-value表示聚集值。每组由采样周期来划分。用户也可以对同一采样周期的数据进行聚集,比如做COUNT查询。
(2)时间查询: 用户可以定义时间操作。例如,在一个建筑监控系统中,用户想要知道会议室麦克风的音量情况,并作周期汇报。感知查询可以写作:
SELECT WINAVG(volume,30s,5s)
FROM sensors
SAMPLE PERIOD 1s
该感知查询的含义为:在30秒内每5秒报告一次平均音量,而采样是每秒钟一次。这是滑动窗口的例子。时间聚集只是提供了一个更简洁的表达一般操作的方法。
(3)基于事件的查询:TinyDB支持事件作为感知数据的收集机制。TinyDB支持对事件的定义,定义的事件的代码必须被编译到传感器节点中。例如查询:
ON EVENT bird-detect(loc):
SELECT AVG(light),AG(temp),event.loc
FORM sensors AS s
WHERE dist (s.loc,event.loc)<10m
SAMPLE PRIOD 2s FOR 30s
该感知查询语句的含义是:在30秒内监测是否有小鸟出现,并且小鸟与它的鸟巢距离小于10米。一旦发现这样的小鸟,则在鸟巢中的传感器节点每隔2秒记录鸟巢的平均亮度和温度,报告鸟的位置。在这种情况下,监测鸟的事件可以通过一些低层操作系统设置来完成,比如,当鸟进入巢穴,开关就被触发。
TinyDB支持简单的触发器。例如,对满足条件的传感器读数做出反应。当传感器读数满足感知查询语言WHERE子句中的触发条件时,触发器即启动,完成相应的操作。例如查询:
SELECT temperature
FROM sensors
WHERE temperature<0
TRIGGER ACTION SetSnd(512)
EPOCH DURATION 512
该感知语句表示每512ms检查一次温度,当温度(temperature)低于0℃时,报警并返回温度值temperature。
(4)基于无线传感器网络生命周期的查询: 在那些清楚采样周期的语句中,用户可以通过一个QUERY LIFETIME〈X〉子句请求一个特定的查询生命期,其中〈x〉是日、周或者月中的一段时间。指定无线传感器网络的查询生命周期是一种更加依靠直觉的方法,依赖于用户对能量消耗的估计。尤其是在环境监测当中,用户并不很关心采样频率的微小调整,也不明白调整采样频率如何影响能量消耗。相反,用户很关心无线传感器网络执行查询的生命周期。例如,“在保证网络至少运行30天的情况下,求传感器节点感知的加速度”的感知查询语句为:
SELECT nodeid,accel
FROM sensors
LIFETIME 30 days
目前TinySQL的功能还比较有限。例如,在WHERE和HAVING子句中只支持简单的比较连接词、字符串比较(如SQL中的LIKE和SIMILAR),以及列和常量的简单算术表达式(算术运算符只能是+、-、*、/),不支持子查询,也不支持布尔操作OR和NOT以及列的重命名。