当前位置: 首页 > 专利查询>湖南大学专利>正文

一种基于布谷鸟过滤器的分布式日志条件查询方法与系统技术方案

技术编号:28941720 阅读:28 留言:0更新日期:2021-06-18 21:47
本发明专利技术公开了一种基于布谷鸟过滤器的分布式日志条件查询方法,包括:获取客户端发送的条件查询请求,根据该条件查询请求在预先构建好的热数据库中进行数据查询,并判断查询到的数据总量是否低于条件查询请求对应的数据量,如果是则对该条件查询请求进行处理,以得到标识字符串,将标识字符串作为键(Key),在冷门条件缓存层进行数据查询,以判断冷门条件缓存层中是否存在该键对应的值(Value),若不是则根据条件查询请求在预先构建好的冷数据库数据分表中执行查询操作,以得到条件查询结果,将条件查询数据结果处理生成JSON字符串,将标识字符串作为键、将JSON字符串作为值形成键值对,并将该键值对存储于冷门条件缓存层中。

【技术实现步骤摘要】
一种基于布谷鸟过滤器的分布式日志条件查询方法与系统
本专利技术属于计算机
,更具体地,涉及一种基于布谷鸟过滤器的分布式日志条件查询方法与系统。
技术介绍
随着物联网技术的快速普及,工业控制领域的终端设备每天都将产生庞大数量的日志数据用以进行终端设备的安全分析评定以及统计管理。如何便捷、快速地在存有数月甚至数年的巨大工控日志数据集中进行针对性的条件查询成为了工控管理系统所需要面对的普遍且严峻的问题。现有的日志条件查询方法有对数据库预先进行分布式分库或者分表再进行查询操作、对数据进行缓存等方法。数据库分库是指根据系统业务或者数据被查询的可能性大小等方式将单个数据库划分为多个数据库,而数据库分表则是根据相同的方式将单张数据表划分为多张数据表。对具有千万级、亿级甚至更高级别数据量的数据库而言,分库能够有效地减少单个数据库的查询压力、避开单数据库处理能力的瓶颈;分表操作能够减少条件查询时多字段匹配、排序所产生的时间消耗;对数据进行缓存则可以通过从缓存层中直接获取数据的方式,减少对数据库直接执行条件查询的次数。然而,上述现有日志条件查询方法,都存在一些不可忽略的缺陷:第一,对数据库预先进行分库的方法仅能在执行部分条件查询时才能起到优化其查询速度的作用,当数据体量较小的数据分库中未能获取足够的查询结果时,还是需要频繁访问数据量大的其他数据分库,从而产生冗长的查询时间消耗;第二,对于数据库预先进行分表的方法而言,无论是开设多个线程同时查询各个数据分表还是将多个分表连接后再执行条件查询,都需要面对分表过多所造成的系统性能问题;第三,对在系统中添加数据缓存的方法而言,普通的数据缓存只能做到对特定的键(Key)快速获取相应的值(Value),不能有效地解决条件查询时多字段条件匹配的查询需求;将整个条件查询结果作为一个整体进行数据缓存的方法往往需要在维护缓存数据完整性上花费大量的时间,较大地影响系统的整体性能。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提供了一种基于布谷鸟过滤器的分布式日志条件查询方法与系统,其目的在于,解决现有对数据库预先进行分库的方法会产生冗长的查询时间消耗的技术问题,以及现有对于数据库预先进行分表的方法需要面对分表过多导致系统性能下降的技术问题,以及现有在系统中添加数据缓存的方法不能有效地解决条件查询时多字段条件匹配的查询需求、花费大量的时间、较大地影响系统整体性能的技术问题。为实现上述目的,按照本专利技术的一个方面,提供了一种基于布谷鸟过滤器的分布式日志条件查询方法,是应用在工控系统中,所述分布式日志条件查询方法包括以下步骤:(1)获取客户端发送的条件查询请求,根据该条件查询请求在预先构建好的热数据库中进行数据查询,并判断查询到的数据总量是否低于条件查询请求对应的数据量,如果是则对该条件查询请求进行处理,以得到标识字符串,并进入步骤(2),否则将查询到的数据返回给客户端,过程结束。(2)将步骤(1)得到的标识字符串作为键(Key),在冷门条件缓存层进行数据查询,以判断冷门条件缓存层中是否存在该键对应的值(Value),若是则返回查询结果至客户端,过程结束,否则进入步骤(3);(3)根据步骤(1)中获取到的条件查询请求在预先构建好的冷数据库数据分表中执行查询操作,以得到条件查询结果;(4)将步骤(3)得到的条件查询数据结果处理生成JSON字符串,将步骤(1)得到的标识字符串作为键、将JSON字符串作为值形成键值对,并将该键值对存储于冷门条件缓存层中。(5)将步骤(1)中得到的标识字符串映射为一个字节的指纹数据,并将该指纹信息保存至布谷鸟过滤器中。优选地,热数据库是通过以下方式构建的:(a)获取工控系统中已存储的日志数据;(b)根据每一条日志数据的生成时间字段获取与工控系统的当前时间最近的10万条日志数据,并将这些日志数据存储至热数据库中。优选地,步骤(1)中对该条件查询请求进行处理,以得到标识字符串这一过程包括如下子步骤:(1-1)获取条件查询请求对应的日志数据所属类型;(1-2)根据客户端对该类型日志数据所允许的字段条件查询范围以及字段顺序,获取条件查询请求中对应字段所请求的条件匹配值,并判断该条件匹配值是否为空,如果是则将条件匹配值设置为字符串“NULL”,然后进入步骤(1-3),否则保持该条件匹配值不变,然后进入步骤(1-3);(1-3)将日志数据所属类型与步骤(1-2)中得到的条件匹配值处理成字符串,并按照步骤(1-2)中获取的字段顺序,依次使用“&”符号将这些字符串进行拼接,以得到标识字符串。优选地,步骤(2)中冷门条件缓存层指的是在热数据库中未能查询得到足够的请求数据量,而需要去查询冷数据库的条件查询请求。冷门条件缓存层使用Redis构建,其中条件查询请求的标识字符串作为键,该条件查询请求在冷数据库当中对应的查询结果为值形成键值对存储于Redis当中。优选地,步骤(3)中的冷数据库数据分表是通过以下步骤构建的:(a)获取冷数据库,其是由从工控系统接收日志数据开始至工控系统当前时间内所收到的全部日志数据构成;(b)按照冷数据库中各类型日志数据的生成时间字段获取各类型日志数据的所属月份;(c)按照步骤(b)得到的各类型日志数据的所属月份将对应类型日志数据分别存储至冷数据库中该类型日志数据的不同月份分表内。优选地,步骤(5)中的布谷鸟过滤器是通过以下步骤构建的:(a)开设len个数据存储桶,其中len表示布谷鸟过滤器的长度且满足公式len=2n(n∈N+);(b)在每个数据存储桶内设置4个存储位置,每个存储位置占有1个字节,用于存储标识字符串的指纹信息。优选地,步骤(5)包括以下子步骤:(5-1)将标识字符串id_Str进行映射,以得到1个字节的指纹信息fp,即fp=fingerPrint(id_Str),其中fingerPrint()为映射函数;(5-2)根据标识字符串id_Str和布谷鸟过滤器长度len获取存储桶序号pos,即:pos=hash(id_Str)%len;(5-3)根据步骤(5-2)中得到的存储桶序号判断第pos个存储桶中的全部4个位置是否有空位,若存在空位则进入步骤(5-4),否则进入步骤(5-5);(5-4)将步骤(5-1)中得到的指纹信息fp存放到第pos个存储桶中存在空位的位置,过程结束;(5-5)将指纹信息fp记作fp_1,从第pos个存储桶中的4个位置中随机选取一个位置,将该位置的指纹信息fp_2取出,并将指纹信息fp_1存入该位置中;(5-6)将第pos个存储桶的位置记作pos_1,通过pos_1以及fp_2之间的异或操作,以得到新的位置pos_2,即pos_2=pos_1⊕fp_2;(5-7)判断新的位置pos_2中是否存在空位,若是则将指纹信息fp_2存入位置pos_2中,过程结束,否则将指纹信息fp_2记作f本文档来自技高网
...

【技术保护点】
1.一种基于布谷鸟过滤器的分布式日志条件查询方法,是应用在工控系统中,其特征在于,所述分布式日志条件查询方法包括以下步骤:/n(1)获取客户端发送的条件查询请求,根据该条件查询请求在预先构建好的热数据库中进行数据查询,并判断查询到的数据总量是否低于条件查询请求对应的数据量,如果是则对该条件查询请求进行处理,以得到标识字符串,并进入步骤(2),否则将查询到的数据返回给客户端,过程结束。/n(2)将步骤(1)得到的标识字符串作为键(Key),在冷门条件缓存层进行数据查询,以判断冷门条件缓存层中是否存在该键对应的值(Value),若是则返回查询结果至客户端,过程结束,否则进入步骤(3);/n(3)根据步骤(1)中获取到的条件查询请求在预先构建好的冷数据库数据分表中执行查询操作,以得到条件查询结果;/n(4)将步骤(3)得到的条件查询数据结果处理生成JSON字符串,将步骤(1)得到的标识字符串作为键、将JSON字符串作为值形成键值对,并将该键值对存储于冷门条件缓存层中。/n(5)将步骤(1)中得到的标识字符串映射为一个字节的指纹数据,并将该指纹信息保存至布谷鸟过滤器中。/n

【技术特征摘要】
1.一种基于布谷鸟过滤器的分布式日志条件查询方法,是应用在工控系统中,其特征在于,所述分布式日志条件查询方法包括以下步骤:
(1)获取客户端发送的条件查询请求,根据该条件查询请求在预先构建好的热数据库中进行数据查询,并判断查询到的数据总量是否低于条件查询请求对应的数据量,如果是则对该条件查询请求进行处理,以得到标识字符串,并进入步骤(2),否则将查询到的数据返回给客户端,过程结束。
(2)将步骤(1)得到的标识字符串作为键(Key),在冷门条件缓存层进行数据查询,以判断冷门条件缓存层中是否存在该键对应的值(Value),若是则返回查询结果至客户端,过程结束,否则进入步骤(3);
(3)根据步骤(1)中获取到的条件查询请求在预先构建好的冷数据库数据分表中执行查询操作,以得到条件查询结果;
(4)将步骤(3)得到的条件查询数据结果处理生成JSON字符串,将步骤(1)得到的标识字符串作为键、将JSON字符串作为值形成键值对,并将该键值对存储于冷门条件缓存层中。
(5)将步骤(1)中得到的标识字符串映射为一个字节的指纹数据,并将该指纹信息保存至布谷鸟过滤器中。


2.根据权利要求1所述的基于布谷鸟过滤器的分布式日志条件查询方法,其特征在于,热数据库是通过以下方式构建的:
(a)获取工控系统中已存储的日志数据;
(b)根据每一条日志数据的生成时间字段获取与工控系统的当前时间最近的10万条日志数据,并将这些日志数据存储至热数据库中。


3.根据权利要求1或2所述的基于布谷鸟过滤器的分布式日志条件查询方法,其特征在于,步骤(1)中对该条件查询请求进行处理,以得到标识字符串这一过程包括如下子步骤:
(1-1)获取条件查询请求对应的日志数据所属类型;
(1-2)根据客户端对该类型日志数据所允许的字段条件查询范围以及字段顺序,获取条件查询请求中对应字段所请求的条件匹配值,并判断该条件匹配值是否为空,如果是则将条件匹配值设置为字符串“NULL”,然后进入步骤(1-3),否则保持该条件匹配值不变,然后进入步骤(1-3);
(1-3)将日志数据所属类型与步骤(1-2)中得到的条件匹配值处理成字符串,并按照步骤(1-2)中获取的字段顺序,依次使用“&”符号将这些字符串进行拼接,以得到标识字符串。


4.根据权利要求1至3中任意一项所述的基于布谷鸟过滤器的分布式日志条件查询方法,其特征在于,步骤(2)中冷门条件缓存层指的是在热数据库中未能查询得到足够的请求数据量,而需要去查询冷数据库的条件查询请求。冷门条件缓存层使用Redis构建,其中条件查询请求的标识字符串作为键,该条件查询请求在冷数据库当中对应的查询结果为值形成键值对存储于Redis当中。


5.根据权利要求1至4中任意一项所述的基于布谷鸟过滤器的分布式日志条件查询方法,其特征在于,步骤(3)中的冷数据库数据分表是通过以下步骤构建的:
(a)获取冷数据库,其是由从工控系统接收日志数据开始至工控系统当前时间内所收到的全部日志数据构成;
(b)按照冷数据库中各类型日志数据的生成时间字段获取各类型日志数据的所...

【专利技术属性】
技术研发人员:李肯立夏禹余思洋周旭刘楚波肖国庆段明星张家豪巢婉琼
申请(专利权)人:湖南大学湖南匡安网络技术有限公司
类型:发明
国别省市:湖南;43

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

1