基于缓冲技术的无线电监测数据查询方法
技术领域
本发明涉及无线电历史监测数据回放技术领域,尤其是涉及一种可对海量半结构化或者非结构化数据进行快速实时回放的基于缓冲技术的无线电监测数据查询方法。
背景技术
无线电监测是大型运动会、国际会议等活动的安全保障和实时监督检查的重要手段,无线电监测工作用于掌握频率情况、保障无线电频率,迅速查处有害干扰。
随着监测设备的发展和监测需求的细化,无线电监测数据的数量呈爆炸式增长,通常一台设备在几个月内的监测数据可达到TB数据级,并且为非结构化或者半结构化监控记录,运用传统的存储和处理方法已经无法满足数据查询的需要;其次,为了节省存储空间,无线电监控数据通常采用字节流的形式进行存储,而观测人员需要在第一时间定位并显示监测数据。
目前,无线电监测数据的历史实时回放,通常有以下两种方案:
采用分布式的Sqlite数据库的形式对监测数据进行逐条存储,每个分布式的Sqlite大小为2G。该方法适用于低频采样的数据设备,且存储监测数据的历史跨度很小,往往只有几台设备几天的数据量。
采用文件系统映射的方法,历史监测数据以文件的形式保存,文件的路径保存于关系型数据库并显示给用户,用户通过文件逐条查询记录。观测人员在查找数据时,需要逐条观测数据,从而定位到需要的观测点,需耗费大量的人力精力,观测人员事先无法概览整个观测数据。
可见,目前无线电监测方法不能有效的对海量的半结构化或者非结构化的数据进行快速实时回放。
发明内容
本发明的发明目的是为了克服现有技术中的无线电监测方法对海量半结构化或者非结构化数据进行快速实时回放的不足,提供了一种可对海量半结构化或者非结构化数据进行快速实时回放的基于缓冲技术的无线电监测数据查询方法。
为了实现上述目的,本发明采用以下技术方案:
一种基于缓冲技术的无线电监测数据查询方法,包括通用接口模块、数据传输模块、HBase数据库和历史数据编排模块和缓冲模块;通用接口模块、数据传输模块、HBase数据库依次连接,HBase数据库、缓冲模块、数据传输模块均与历史数据编排模块连接,所述查询方法包括如下步骤:
(1-1)历史数据编排模块将原始监测数据的每条记录解封后,读取与每条记录对应的数据帧的帧头,根据帧头信息生成rowkey索引,历史数据编排模块通过API接口将每个数据帧、与每个数据帧关联的rowkey索引批量导入HBase数据库;HBase数据库中设有若干个设备表;
(1-2)通用接口模块接收用户的查询请求,并将查询请求发送给数据传输模块;
(1-3)数据传输模块收到查询请求后,以queryid+”query”字段查询数据传输模块的消息表,如果查到消息表,则转入步骤(1-4);
如果消息表不存在,数据传输模块生成消息表,消息表包括传输集群kafka的生产者p1、消费者c1、订阅消息queryid+”query”、生产者p2、消费者c2和订阅消息queryid+“request”;
(1-4)数据传输模块的kafka集群将查询内容通过p1发送到c1,c1接收到查询内容后,查询HBase的各个设备表中与查询内容的查询设备ID相对应的设备表,如果没找到设备表,则返回一个查询失败的消息格式;
历史数据编排模块利用公式计算数据帧的延迟时间m;其中,n为查询内容中的用户查询参数,B为标准延迟毫秒数;
(1-4-1)如果找到设备表,以查询内容的记录开始时间T1、记录结束时间T2、服务ID和查询频率查询rowkey索引;如果找不到与服务ID或者查询频率匹配的rowkey索引,则返回查询失败的消息;
(1-4-2)如果找到与服务ID和查询频率匹配并且T1≤记录时间≤T2的p个rowkey索引构成的rowkey索引组;
(1-4-3)选择p个rowkey索引中的记录时间最接近T1的rowkey索引A,提取HBase数据库的与rowkey索引A对应的数据帧,历史数据编排模块收到数据帧后,将数据帧存入缓冲模块中;
(1-5)查询消息表,通过c1查询与其对应的p2,p2接收历史记录后,达到延迟时间m后,将所述数据帧发给c2,c2将数据帧发送给查询用户;
(1-5-1)当p>0,使p值减少1,将rowkey索引A从rowkey索引组中去除,转入步骤(1-4-3)。
本发明通过独特设计的rowkey索引,将无线电监测数据逐条载入HBase数据库中,并有效防止监测设备过快时在时间重复时记录的重复,支持用户逐记录快速查询;通过数据传输模块的查询条件与rowkey的对应,实现了用户的任意、快速实时的定位并回放数据。
作为优选,所述rowkey索引包括1个字节的散列字段、4个字节的时间戳字段、1个字节的监测服务编码字段、4个字节的监测频率字段和4个字节的负载字段。
本发明通过rowkey索引生成算法控制rowkey索引的长度和内容,在满足区分各条记录的同时,又通过缩短rowkey索引的各个字段,有效降低了存储空间,使历史数据的查询效率有效提升。
作为优选,所述时间戳字段利用如下步骤生成:
历史数据编排模块读取每帧数据的帧头,获取每帧数据的记录时间,并将记录时间转化为毫秒数,将毫秒数存入时间戳字段。
将记录时间的毫秒数保存于rowkey的时间戳字段4个字节中,使精确到毫秒的时间戳保存从17字节下降到4个字节,有效节约了rowkey的字节空间,提高了查询效率。
作为优选,所述散列字段利用如下步骤生成:
历史数据编排模块将毫秒数以256取余,其结果保存于散列字段中。
作为优选,所述监测服务编码字段利用如下步骤生成:
历史数据编排模块获取每帧数据的监测服务编码,将监测服务编码保存在监测服务编码字段中。根据国家标准规定,无线电监测需要满足26种监测服务,分别从1到26开始编码,存入监测服务编码字段中;27至265可用于后续扩展。
作为优选,所述负载字段利用如下步骤生成:
历史数据编排模块获取每帧数据的帧负载,读取帧负载每个字段的值L;利用公式S=2L-1计算每个字段值的变换值S,将各个字段的S相加得到S′,将S′写入rowkey索引的负载字段中。
根据国家标准规定,无线电监测帧负载中需要实现18个选项。因此只需要占用18位,空余的14位后续扩展用。
作为优选,所述步骤(1-2)中,通用接口模块将查询请求以XML的形式发送给数据传输模块。
因此,本发明具有如下有益效果:查询速度快、查询精度高,可对海量半结构化或者非结构化数据进行快速实时回放。
附图说明
图1是本发明的一种原理示意图;
图2是本发明的一种流程图。
图中:通用接口模块1、数据传输模块2、HBase数据库3、历史数据编排模块4、消息表5、kafka集群6、缓冲模块7。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
如图1所示的实施例是一种基于缓冲技术的无线电监测数据查询方法,包括通用接口模块1、数据传输模块2、HBase数据库3和历史数据编排模块4和缓冲模块7;通用接口模块、数据传输模块、HBase数据库依次连接,HBase数据库、缓冲模块、数据传输模块均与历史数据编排模块连接,
如图2所示,查询方法包括如下步骤:
步骤100,生成rowkey索引并将原始监测数据导入HBase数据库
历史数据编排模块将原始监测数据的每条记录解封后,读取与每条记录对应的数据帧的帧头,根据帧头信息生成rowkey索引,历史数据编排模块通过API接口将每个数据帧、与每个数据帧关联的rowkey索引批量导入HBase数据库;HBase数据库中设有若干个设备表;
步骤200,接收查询请求
通用接口模块接收用户的查询请求,通用接口模块将查询请求以XML的形式发送给数据传输模块;
步骤300,查询消息表
数据传输模块收到请求后,以queryid+”query”字段查询数据传输模块的消息表,如果查到消息表,则转入步骤400;
查到消息表,说明接收到的是再次查询请求,数据传输模块中已经有消息表,
如果消息表不存在,说明是第一次收到查询请求,数据传输模块中还没有建立消息表,如图1所示的数据传输模块生成消息表5,消息表包括传输集群kafka的生产者p1、消费者c1、订阅消息queryid+”query”、生产者p2、消费者c2和订阅消息queryid+“request”:
步骤400,查询历史记录
数据传输模块的如图1所示的kafka集群6将查询内容通过p1发送到c1,c1接收到查询内容后,查询HBase的各个设备表中与查询内容的查询设备ID相对应的设备表,如果没找到设备表,则返回一个查询失败的消息格式;
历史数据编排模块利用公式计算数据帧的延迟时间m;其中,n为查询内容中的用户查询参数,B为标准延迟毫秒数,B=1000毫秒,n=2;
步骤410,如果找到设备表,以查询内容的记录开始时间T1、记录结束时间T2、服务ID和查询频率查询rowkey索引;如果找不到与服务ID或者查询频率匹配的rowkey索引,则返回查询失败的消息;
步骤420,如果找到与服务ID和查询频率匹配并且T1≤记录时间≤T2的p个rowkey索引构成的rowkey索引组;
步骤430,选择p个rowkey索引中的记录时间最接近T1的rowkey索引A,提取HBase数据库的与rowkey索引A对应的数据帧,历史数据编排模块收到数据帧后,将数据帧存入缓冲模块中;
步骤500,给查询用户返回历史记录
查询消息表,通过c1查询与其对应的p2,p2接收历史记录后,达到延迟时间m后,将所述数据帧发给c2,c2将数据帧发送给查询用户;
步骤510,当p>0,使p值减少1,将rowkey索引A从rowkey索引组中去除,转入步骤430。
rowkey索引包括1个字节的散列字段、4个字节的时间戳字段、1个字节的监测服务编码字段、4个字节的监测频率字段和4个字节的负载字段。
历史数据编排模块读取每帧数据的帧头,获取每帧数据的记录时间,并将记录时间转化为毫秒数,将毫秒数存入时间戳字段。
历史数据编排模块将毫秒数以256取余,其结果保存于散列字段中。
历史数据编排模块获取每帧数据的监测服务编码,将监测服务编码保存在监测服务编码字段中。
历史数据编排模块获取每帧数据的帧负载,读取帧负载每个字段的值L;利用公式S=2L-1计算每个字段值的变换值S,将各个字段的S相加得到S′,将S′写入rowkey索引的负载字段中。
例如,某帧数据的监测服务编码和监测记录为<监测服务编号:5,(帧头:20160511121415879,帧负载:DT=3 DT=6 DT=8 fre=91.8)>;表示该帧数据由服务编号为5的监测服务产生,且帧头中时间为2016年05月11日12点14分15秒879毫秒,帧负载中含有的选项值为2、6、8,监测频率为91.8MHZ;历史数据编排模块将帧头中的20160511121415879时间转化为毫秒数1462896855879,对毫秒数1462896855879取256的余为71;历史数据编排模块将71放入rowkey的散列字段中,将1462896855879放入rowkey的时间戳字段中,将监测服务编码5放入rowkey的监测服务编码中,将帧负载中的91.8频率放入rowkey字段的监测频率字段中,利用公式S=2L-1计算每个字段值的变换值S,DT=3 DT=6DT=8的变换值S分别为7,63,255;S′=7+63+255=327;最终形成的rowkey索引的字段值为711462896855879 5 91.8 327,即rowkey索引用14个字节表示了散列字段、时间戳字段、监测服务编码字段、监测频率字段、负载字段。
经过试验计算,本发明的大数据实时回放方法在PB级的监控数据能以秒级或者毫秒级定位到用户所需要的数据,快速呈现给用户,同时用户能够通过用户查询参数控制获取数据的速度,实现了大数据环境下用户的按需获取数据;得益于rowkey索引带有帧负载内容的设计,在采集过快、帧相同时也不会出现帧重复和丢失的现象;并且通过rowkey索引的生成算法,能够节省HBase的region server的50%的存储空间,减少了磁盘的存储空间,通过帧负载内容到rowkey的映射算法,大大提升了大数据的查询效率。
应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。