CN109783441A - 基于Bloom Filter的海量数据查询方法 - Google Patents
基于Bloom Filter的海量数据查询方法 Download PDFInfo
- Publication number
- CN109783441A CN109783441A CN201811581515.XA CN201811581515A CN109783441A CN 109783441 A CN109783441 A CN 109783441A CN 201811581515 A CN201811581515 A CN 201811581515A CN 109783441 A CN109783441 A CN 109783441A
- Authority
- CN
- China
- Prior art keywords
- data
- bloom filter
- file
- inquiry
- mass
- 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.)
- Pending
Links
Abstract
本发明公开了一种基于Bloom Filter的海量数据查询方法,包括使用SQL引擎将收集到的海量数据按分区存储到数据系统中,生成SQL逻辑表,形成数据文件;基于Bloom Filter算法,对数据文件生成Bloom Filter索引;查询数据时,SQL引擎根据所述的Bloom Filter索引信息判断数据文件中是否包含请求查询的数据,从而决定是否读取该数据文件。本方法对现有SQL引擎进行了改进,在查询时过滤了不包含所需查询数据的数据文件,减少了大量不必要的数据读取和查询,在海量数据的情况下的数据查询的性能可以比现有技术提高百倍以上。
Description
技术领域
本发明涉及一种海量数据查询方法,特别是涉及一种基于Bloom Filter的海量数据查询方法。
背景技术
随着大数据时代的到来,分布式数据库的发展和应用越来越广泛,数据系统存储的数据越来越海量,需要可以组建成规模上千的集群,处理PB级别的大数据分析系统。Apache Impala、Presto、Apache Drill、Apache HAWQ等都是目前基于MPP架构的SQL-on-Hadoop(HDFS)查询引擎,它们提供了类SQL的语法,能够提供较高的响应速度和吞吐量,能够对PB级数据进行交互式实时查询、分析。但这些SQL引擎在读取文件时,并不能区分该文件中是否包含所需要查询的数据,随着数据量的增加特别是面对着海量数据,查询性能也会随之急剧下降。
Bloom Filter是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是一个二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中,能够有效地提高检索的效率。但是Bloom Filter目前没有在Apache Impala中的应用,也没发现在其他SQL引擎中的应用。
发明内容
发明目的:本发明要解决的技术问题是提供一种基于Bloom Filter的海量数据查询方法,能够判断文件中是否包含所需查询的数据,过滤了不包含所需查询数据的数据文件,减少了不必要的数据读取和查询,在海量数据的情况下能够大幅提高数据查询的性能。
技术方案:本发明所述的基于Bloom Filter的海量数据查询方法,包括以下步骤:
(1)使用SQL引擎将收集到的海量数据按分区存储到数据系统中,生成SQL逻辑表,形成数据文件;
(2)基于Bloom Filter算法,对数据文件生成Bloom Filter索引;
(3)查询数据时,SQL引擎根据所述的Bloom Filter索引信息判断数据文件中是否包含请求查询的数据,从而决定是否读取该数据文件。
所述SQL引擎可以是Apache Impala、Presto、Apache Drill、Apache HAWQ中的任一种。
进一步的,所述海量数据是通过消息中间件从多种数据源收集、过滤和预处理后得到的,包括结构化和非结构化数据。
进一步的,所述的数据系统是分布式文件系统HDFS。
进一步的,步骤(2)中每1个数据文件对应1个Bloom Filter索引,该索引信息存储在关系数据库中。
进一步的,步骤(2)中的生成Bloom Filter索引包括以下步骤:
(21)建立m位的bit数组,m由文件数据量大小决定,数组中每一位的数值都为0;
(22)对SQL表中的字段数据x做k次hash运算,其中第i次hash运算结果n=(hash(x)%m),每次运算后将所述m位的bit数组中的第n位中设置为1,其中1≤i≤k≤m。
进一步的,步骤(3)中的具体步骤为:对查询数据y做k次哈希运算,如果运算所映射的m位的数组中相应位置都为1,则判断包含数据y,将数据文件保存到待读取文件列表中;如果不全为1,则判断不包含对象数据y,忽略该数据文件。
进一步的,上述方法还包括针对新增数据的操作:对新增数据进行k次hash运算,将结果映射到所在数据文件对应的Bloom Filter索引中并更新索引信息。
有益效果:本方法能够在进行数据查询时,根据Bloom Filter索引判断分片文件中是否包含所需要查询的数据,以空间换时间,利用少量的存储空间存储Bloom Filter索引信息,换取了在数据查询时,减小大量的不必要的系统IO,从而大幅提升数据查询性能百倍以上。
附图说明
图1是本方法实施方式的整体流程图;
图2是传统Impala查询引擎查询架构图;
图3是经过Bloom Filter索引优化后的Impala查询引擎查询架构图;
图4是使用Bloom Filter索引优化后的查询过程图;
图5是本实例中查询所耗时间对比示意图。
具体实施方式
如图1所示,本方法的流程为,首先从不同的数据源收集,过滤和预处理后得到的海量数据保存到hdfs中;针对某个或某些基于统计的数据,利用Bloom Filter算法,对这些数据做k次hash运算,计算结果映射到长度为m的位数组中,生成Bloom Filter索引;针对新增的数据同样需要做k次hash运算,计算结果映射到上述位数组中,更新索引信息;用户提交包含基于某个或某些基于统计的数据查询请求,SQL引擎在创建执行计划时,根据文件的Bloom Filter索引信息判断数据文件中是否包含用户请求查询的数据,从而决定是否读取该文件。
本方法可以应用在当前主流的SQL引擎Apache Impala、Presto、Apache Drill、Apache HAWQ中,本实施方式以Apache Impala为例描述实施过程,检验技术效果。具体如下。
步骤1,从不同的数据源收集,过滤和预处理后的海量数据,保存到分布式文件系统hdfs中。在该步骤中,首先利用各种中间件从不同的数据源收集数据,具体实现中,由于收集的数据中包含重复及“无效”等数据,因此需要对收集的数据经过预处理后保存到分布式文件系统hdfs中。
步骤2,针对某个或某些基于统计的数据,利用Bloom Filter算法,基于Impala创建Bloom Filter索引。在该步骤中,针对某个或某些基于统计的数据,在写入文件之前,对Impala表中的字段数据x做k次hash运算,其中第i次hash运算结果n=(hash(x)%m),每次运算后将所述m位的bit数组中的第n位中设置为1,其中1≤i≤k≤m。每一个存储文件对应一个Bloom Filter索引,该索引信息可存储在传统关系型数据库当中。
例如,某系统每天存储约2T的移动用户信号数据,每5分钟一个分区,每天288个存储分区,每天约存储5万个文件,每个存储文件大小在30M~100M不等。在创建存储文件后,相应的每个文件初始化一个长度为m的位数组,每一位初始值为0。当进行数据写入时,针对某个或某些基于统计的数据作k词hash运算,并将结果映射到上述位数组中。当需要查询某个用户近一个月的运动轨迹时,Impala查询引擎会按分区信息读取一个月的所有的分区文件,以每个文件0.05秒读取一个文件计算,查询某个用户近一个月的移动轨迹需要大约10min(100万个文件*0.05)的时间。图2所示的是传统的Impala查询架构。为了提升查询性能,本发明引入Bloom Filter算法,在写入数据时,根据用户的号码进行k次hash运行,将结果映射到长度为m的位数组中,生成长度为m的Bloom Filter索引。当查询某用户近一个月的移动轨迹时,在读取文件之前,同样需要对所要查询的用户号码进行k次hash运算,将计算结果映射到文件对应的Bloom Filter索引中,判断文件中是否包含所需要查询的信息。该方法可过滤掉大部分不包含用户数据的文件,减少系统的IO,从而大幅提升查询性能。图3所示是经过Bloom Filter索引优化后的Impala查询引擎查询架构,图4所示的是使用Bloom Filter索引优化后的查询过程。
步骤3,针对新增的数据,针对某个或某些基于统计的数据进行k次hash运算,并将结果映射到文件对应的Bloom Filter索引中。在该步骤中,在Impala查询引擎中创建一个线程,扫描已写完的分区中的文件,对文件中的基于统计的某个或某些数据做k次hash运算,并将计算结果更新到文件所对应的Bloom Filter索引中。
步骤4,用户提交包含查询基于某个或某些基于统计的数据查询请求,Impala引擎在创建执行计划时,根据用户提交的查询请求中基于某个或某些基于统计的数据,查询对应文件的Bloom Filter索引,判断数据文件中是否包含用户所要查询的数据,如果包含,则将该文件保存到执行计划待读取文件列表中;如果不包含,则忽略该文件。在该步骤中,SQL引擎根据用户的查询请求,生成执行计划,Impala引擎将执行计划分发给各个执行节点,执行节点在读取文件之前,根据文件对应的Bloom Filter索引,判断是否有必要读取该文件。
例如,当需要查询某移动用户2018年10月1日至2018年10月7日这段时间范围内的移动轨迹时,Impala引擎根据用户提交的查询请求生成执行计划,需要读取分析的文件分区包括2018年10月1日至7日的所有分区文件。执行节点在读取文件之前,根据用户的号码进行k次hash运算,并将结果映射到文件对应的Bloom Filter索引上,如果索引对应的位上的值为1,说明该文件中可能包含所需要查询的数据。如果索引对应的位上的值为0,说明该文件中并不包含所需要查询的数据,则不必再读取该文件。
以具体的实验数据进行分析如下:在本实验中,采用5台服务器搭建了一个hadoop集群,服务器CPU采用E5-2630v4*2,内存128G,硬盘为12*2T的SATA,全部的总数据量大小为1.3T,超过100亿条数据记录,字段包括时间戳(timestamp)、IP地址、低基数列、高基数列等,其中IP详单及字符串详单创建bloomfilter索引,查询优化前及优化后的耗时对比如图5所示。实验证明,在充分发挥hadoop集群的分布式存储和分布式计算能力的情况下,100亿数据量的查询平均的响应时间可以控制在在10s以内。与传统的方法相比,查询效率提高了百倍以上,具有非常显著的技术效果。
Claims (8)
1.一种基于Bloom Filter的海量数据查询方法,其特征在于包括以下步骤:
(1)使用SQL引擎将收集到的海量数据按分区存储到数据系统中,生成SQL逻辑表,形成数据文件;
(2)基于Bloom Filter算法,对数据文件生成Bloom Filter索引;
(3)查询数据时,SQL引擎根据所述的Bloom Filter索引信息判断数据文件中是否包含请求查询的数据,从而决定是否读取该数据文件。
2.根据权利要求1所述的基于Bloom Filter的海量数据查询方法,其特征在于为步骤(1)中所述SQL引擎可以是Apache Impala、Presto、Apache Drill、Apache HAWQ中的任一种。
3.根据权利要求1所述的基于Bloom Filter的海量数据查询方法,其特征在于为步骤(1)中所述海量数据是通过消息中间件从多种数据源收集、过滤和预处理后得到的,包括结构化和非结构化数据。
4.根据权利要求1所述的基于Bloom Filter的海量数据查询方法,其特征在于:步骤(1)中所述的数据系统是分布式文件系统HDFS。
5.根据权利要求1所述的基于Bloom Filter的海量数据查询方法,其特征在于:步骤(2)中每1个数据文件对应1个Bloom Filter索引,该索引信息存储在关系数据库中。
6.根据权利要求1所述的基于Bloom Filter的海量数据查询方法,其特征在于步骤(2)中的生成Bloom Filter索引包括以下步骤:
(21)建立m位的bit数组,m由文件数据量大小决定,数组中每一位的数值都为0;
(22)对SQL表中的字段数据x做k次hash运算,其中第i次hash运算结果n=(hash(x)%m),每次运算后将所述m位的bit数组中的第n位中设置为1,其中1≤i≤k≤m。
7.根据权利要求6所述的基于Bloom Filter的海量数据查询方法,其特征在于步骤(3)中的具体步骤为:对查询数据y做k次哈希运算,如果运算所映射的m位的bit数组中相应位置都为1,则判断包含数据y,将数据文件保存到待读取文件列表中;如果不全为1,则判断不包含对象数据y,忽略该数据文件。
8.根据权利要求7所述的基于Bloom Filter的海量数据查询方法,其特征在于还包括针对新增数据的操作:对新增数据进行k次hash运算,将结果映射到所在数据文件对应的Bloom Filter索引中并更新索引信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811581515.XA CN109783441A (zh) | 2018-12-24 | 2018-12-24 | 基于Bloom Filter的海量数据查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811581515.XA CN109783441A (zh) | 2018-12-24 | 2018-12-24 | 基于Bloom Filter的海量数据查询方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109783441A true CN109783441A (zh) | 2019-05-21 |
Family
ID=66498147
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811581515.XA Pending CN109783441A (zh) | 2018-12-24 | 2018-12-24 | 基于Bloom Filter的海量数据查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109783441A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159106A (zh) * | 2019-12-30 | 2020-05-15 | 亚信科技(中国)有限公司 | 一种数据查询方法及装置 |
CN111241177A (zh) * | 2019-12-31 | 2020-06-05 | 中国联合网络通信集团有限公司 | 数据采集方法、系统及网络设备 |
CN111538727A (zh) * | 2020-04-16 | 2020-08-14 | 四川轻化工大学 | 一种基于Bloom Filter的多路快速查找分类方法与系统 |
CN111538984A (zh) * | 2020-04-17 | 2020-08-14 | 南京东科优信网络安全技术研究院有限公司 | 一种可信白名单快速匹配装置与方法 |
CN112650759A (zh) * | 2020-12-30 | 2021-04-13 | 中国平安人寿保险股份有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
CN112883249A (zh) * | 2021-03-26 | 2021-06-01 | 瀚高基础软件股份有限公司 | 版式文档处理方法、装置以及装置的应用方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678550A (zh) * | 2013-09-09 | 2014-03-26 | 南京邮电大学 | 一种基于动态索引结构的海量数据实时查询方法 |
US20160267132A1 (en) * | 2013-12-17 | 2016-09-15 | Hewlett-Packard Enterprise Development LP | Abstraction layer between a database query engine and a distributed file system |
CN106503196A (zh) * | 2016-10-26 | 2017-03-15 | 云南大学 | 云环境下可扩展存储索引结构的构建和查询方法 |
CN107273467A (zh) * | 2017-06-06 | 2017-10-20 | 南京搜文信息技术有限公司 | 一种支持可搜索加密的安全索引结构及其构造方法 |
CN107357843A (zh) * | 2017-06-23 | 2017-11-17 | 东南大学 | 基于数据流结构的海量网络数据查找方法 |
-
2018
- 2018-12-24 CN CN201811581515.XA patent/CN109783441A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678550A (zh) * | 2013-09-09 | 2014-03-26 | 南京邮电大学 | 一种基于动态索引结构的海量数据实时查询方法 |
US20160267132A1 (en) * | 2013-12-17 | 2016-09-15 | Hewlett-Packard Enterprise Development LP | Abstraction layer between a database query engine and a distributed file system |
CN106503196A (zh) * | 2016-10-26 | 2017-03-15 | 云南大学 | 云环境下可扩展存储索引结构的构建和查询方法 |
CN107273467A (zh) * | 2017-06-06 | 2017-10-20 | 南京搜文信息技术有限公司 | 一种支持可搜索加密的安全索引结构及其构造方法 |
CN107357843A (zh) * | 2017-06-23 | 2017-11-17 | 东南大学 | 基于数据流结构的海量网络数据查找方法 |
Non-Patent Citations (2)
Title |
---|
刘正: "海量数据处理与挖掘关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》 * |
刘正: "海量数据处理与挖掘关键技术研究", 《中国博士学位论文全文数据库 信息科技辑》, no. 06, 15 June 2018 (2018-06-15), pages 33 - 37 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159106A (zh) * | 2019-12-30 | 2020-05-15 | 亚信科技(中国)有限公司 | 一种数据查询方法及装置 |
CN111159106B (zh) * | 2019-12-30 | 2023-04-07 | 亚信科技(中国)有限公司 | 一种数据查询方法及装置 |
CN111241177A (zh) * | 2019-12-31 | 2020-06-05 | 中国联合网络通信集团有限公司 | 数据采集方法、系统及网络设备 |
CN111241177B (zh) * | 2019-12-31 | 2023-07-04 | 中国联合网络通信集团有限公司 | 数据采集方法、系统及网络设备 |
CN111538727A (zh) * | 2020-04-16 | 2020-08-14 | 四川轻化工大学 | 一种基于Bloom Filter的多路快速查找分类方法与系统 |
CN111538984A (zh) * | 2020-04-17 | 2020-08-14 | 南京东科优信网络安全技术研究院有限公司 | 一种可信白名单快速匹配装置与方法 |
CN111538984B (zh) * | 2020-04-17 | 2023-04-25 | 南京东科优信网络安全技术研究院有限公司 | 一种可信白名单快速匹配装置与方法 |
CN112650759A (zh) * | 2020-12-30 | 2021-04-13 | 中国平安人寿保险股份有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
CN112650759B (zh) * | 2020-12-30 | 2023-10-27 | 中国平安人寿保险股份有限公司 | 数据查询方法、装置、计算机设备及存储介质 |
CN112883249A (zh) * | 2021-03-26 | 2021-06-01 | 瀚高基础软件股份有限公司 | 版式文档处理方法、装置以及装置的应用方法 |
CN112883249B (zh) * | 2021-03-26 | 2022-10-14 | 瀚高基础软件股份有限公司 | 版式文档处理方法、装置以及装置的应用方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109783441A (zh) | 基于Bloom Filter的海量数据查询方法 | |
JP6388655B2 (ja) | 選択性用データビットインターリーブによるリレーショナルデータベースのマルチカラムインデックスの生成 | |
CN107220285B (zh) | 面向海量轨迹点数据的时空索引构建方法 | |
CN107423422B (zh) | 基于网格的空间数据分布式存储及检索方法和系统 | |
Han et al. | A novel solution of distributed memory nosql database for cloud computing | |
CN106599052B (zh) | 一种基于Apache Kylin的数据查询系统及其方法 | |
CN107515927A (zh) | 一种房地产用户行为分析平台 | |
CN102521406A (zh) | 海量结构化数据复杂查询任务的分布式查询方法和系统 | |
CN105843841A (zh) | 一种小文件存储方法和系统 | |
CN107329814A (zh) | 一种基于rdma的分布式内存数据库查询引擎系统 | |
CN106528847A (zh) | 一种海量数据的多维度处理方法及系统 | |
CN103942342A (zh) | 一种内存数据库oltp&olap并发查询优化方法 | |
CN111427847B (zh) | 面向用户自定义元数据的索引与查询方法和系统 | |
CN107291806A (zh) | 一种Web可视化环境中的数据视图副本迭代方法 | |
CN104408163A (zh) | 一种数据分级存储方法和装置 | |
WO2020077027A1 (en) | Method and system for executing queries on indexed views | |
CN103559229A (zh) | 基于MapFile的小文件管理服务SFMS系统及其使用方法 | |
Xia et al. | A MapReduce-based parallel frequent pattern growth algorithm for spatiotemporal association analysis of mobile trajectory big data | |
CN111258978A (zh) | 一种数据存储的方法 | |
El Alami et al. | Supply of a key value database redis in-memory by data from a relational database | |
Sarlis et al. | Datix: A system for scalable network analytics | |
Song et al. | Haery: a Hadoop based query system on accumulative and high-dimensional data model for big data | |
Hu et al. | Efficient provenance management via clustering and hybrid storage in big data environments | |
Sawyer et al. | Understanding query performance in Accumulo | |
AU2020101071A4 (en) | A Parallel Association Mining Algorithm for Analyzing Passenger Travel Characteristics |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |