CN113486025B - 数据存储方法、数据查询方法及装置 - Google Patents
数据存储方法、数据查询方法及装置 Download PDFInfo
- Publication number
- CN113486025B CN113486025B CN202110857646.1A CN202110857646A CN113486025B CN 113486025 B CN113486025 B CN 113486025B CN 202110857646 A CN202110857646 A CN 202110857646A CN 113486025 B CN113486025 B CN 113486025B
- Authority
- CN
- China
- Prior art keywords
- data
- segment
- bloom filter
- configuration
- mapping
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
Abstract
本公开提供了一种数据存储方法、数据查询方法及装置,涉及分布式技术领域。本公开的数据存储方法包括:获取待存储的布隆过滤器文件,布隆过滤器文件包括配置段和数据段,数据段包括多个数据位,数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,配置段存储有多个数据位的数量和用于确定映射函数集合的配置信息;将数据段拆分为多个数据子段;以及将配置段和多个数据子段存储至分布式存储集群。
Description
技术领域
本公开涉及分布式技术领域,具体涉及一种数据存储方法及装置、数据查询方法及装置、电子设备、存储介质和计算机程序产品。
背景技术
相关技术中,经常需要查询一个元素是否在一个集合中。例如,在英文字处理软件中,需要检查一个单词是否拼写正确,即查询单词是否存在于已知的词典中;在账号鉴权场景中,需要判断某个账号是否具有访问权限,即查询账号是否存在于账号白名单中;在采用网络爬虫抓取信息的场景中,需要判断一个网址是否被访问过,即查询网址是否存在于已访问网址集合中;等等。
在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。
发明内容
本公开提供了一种数据存储方法及装置、数据查询方法及装置、电子设备和存储介质。
根据本公开的一方面,提供了一种数据存储方法,包括:获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;将所述数据段拆分为多个数据子段;以及将所述配置段和所述多个数据子段存储至分布式存储集群。
根据本公开的另一方面,还提供一种数据查询方法,包括:接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;确定所述多个偏移量各自相应的数据位所在的数据子段;以及通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
根据本公开的另一方面,还提供一种数据存储装置,包括:获取模块,用于获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;拆分模块,用于将所述数据段拆分为多个数据子段;以及导入模块,用于将所述配置段和所述多个数据子段存储至分布式存储集群。
根据本公开的另一方面,还提供一种数据查询装置,包括:请求接收模块,用于接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;函数确定模块,用于通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;映射模块,用于利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;定位模块,用于确定所述多个偏移量各自相应的数据子段;以及查询模块,通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述任一方面的方法。
根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述任一方面的方法。
根据本公开的一个或多个实施例,采用布隆过滤器文件的数据段来存储数据元素集合中的多个数据元素的映射值,并将该数据段拆分为多个数据子段,将各数据子段与布隆过滤器文件的配置段存储至分布式存储集群中。基于分布式存储集群中存储的布隆过滤器文件的配置段与各数据子段,可以高效地查询待查询元素是否存在于数据元素集合中。本公开的实施例将数据存储与数据查询解耦,并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
图1示出了根据本公开实施例的可以在其中实施本文描述的各种方法的示例性系统的示意图;
图2示出了根据本公开实施例的布隆过滤器文件的示例性结构图;
图3示出了根据本公开实施例的数据存储方法的流程图;
图4示出了根据本公开实施例的数据查询方法的流程图;
图5示出了根据本公开实施例的数据存储装置的结构框图;
图6示出了根据本公开实施例的数据查询装置的结构框图;以及
图7示出了根据本公开实施例的示例性电子设备的结构框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
在相关技术中,经常需要查询一个元素是否在一个集合中。例如,在英文字处理软件中,需要检查一个单词是否拼写正确,即查询单词是否存在于已知的词典中;在账号鉴权场景中,需要判断某个账号是否具有访问权限,即查询账号是否存在于账号白名单中;在采用网络爬虫抓取信息的场景中,需要判断一个网址是否被访问过,即查询网址是否存在于已访问网址集合中;等等。
布隆过滤器(Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它由一个很长的二进制向量和一系列随机映射函数组成,可以用于查询一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例Falsenegatives,如果某个元素确实没有在该集合中,那么Bloom Filter是不会报告该元素存在于集合中的,所以不会漏报)。
考虑到布隆过滤器的高空间效率和高查询效率,可以基于布隆过滤器来快速查询一个元素是否在一个集合中。即,首先采用映射函数集合对数据元素集合中已有的多个数据元素进行映射,生成布隆过滤器文件,然后基于布隆过滤器文件来向用户提供数据查询服务。在相关技术中,布隆过滤器文件通常存储于查询服务器中,与查询服务的耦合程度较高,当查询服务器升级(硬件或操作系统层面的升级)或查询服务升级(软件代码升级)时需要重启查询服务,重启服务后布隆过滤器文件需要重新加载,在整个重启加载的过程中无法向用户提供查询服务。为了提高查询服务的可用性,降低系统故障率和故障时间,本公开提供一种基于布隆过滤器的数据存储及数据查询方案,以将数据存储与数据查询解耦,并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
下面将结合附图详细描述本公开的实施例。
图1示出了根据本公开实施例的可以在其中实施本文描述的各种方法的示例性系统100的示意图。参考图1,该系统100包括生产服务器110、导入服务器120、分布式存储集群130、查询服务器140以及客户端设备150。
生产服务器110用于根据数据元素集合中的多个数据元素生成布隆过滤器文件。可以理解的,生产服务器110可以是单台服务器、多台服务器的集群、分布式系统、或者提供基础云服务(诸如云数据库、云计算、云存储、云通信)的云服务器。
可以理解的,针对不同的应用场景,数据元素的类型不同。例如,在智能营销及智能推荐场景中,希望定向地向符合特定条件的用户推荐内容(例如广告、产品、服务等),那么数据元素可以是用户的设备标识,例如IMEI(International Mobile EquipmentIdentity)、MAC(Media Access Control)地址等,数据元素集合可以是符合特定条件的多个用户的设备标识的集合。在英文字处理软件中,需要检查一个单词是否存在于词典中,那么数据元素可以是单词,数据元素集合可以是拼写正确的单词的集合(即词典)。在采用网络爬虫抓取信息的场景中,需要判断一个网址是否被访问过,相应地,数据元素可以是网址(即网页的URL),数据元素集合可以是已被访问过的网址的集合。本公开对数据元素的具体类型不作限制。
根据一些实施例,布隆过滤器文件包括配置段和数据段,数据段包括多个数据位(bit),数据位的值(0或1)通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定。配置段存储有上述多个数据位的数量和用于确定映射函数集合的配置信息。
根据一些实施例,配置信息例如包括布隆过滤器的类型和映射函数集合包括的映射函数的数量。布隆过滤器的类型可以是任意一种布隆过滤器的实现方式,例如可以是开源的Google Guava BloomFilter、Counting Bloom Filter、Cuckoo Filter等,这些实现方式中定义了映射函数的数量和表达式,因此通过结合布隆过滤器的类型和映射函数的数量,即可确定相应的映射函数(即确定映射函数的表达式)。
根据另一些实施例,配置信息也可以直接包括映射函数集合所包括的每一个映射函数的表达式。
图2示出了根据本公开实施例的布隆过滤器文件200的示例性结构图。如图2所示,文件200包括配置段210和数据段220。配置段210包括文件200的前9个字节,数据段220包括从第10个字节开始往后的所有字节。
配置段210包括文件200的前9个字节。这9个字节中的前两个字节用于存储用于确定映射函数集合的配置信息,具体地,第一个字节用于存储布隆过滤器的类型,第二个字节用于存储映射函数集合包括的映射函数的数量。第3~9个字节用于存储数据段220所包括的数据位的数量。如图2所示,数据段220包括1024个数据位(bit),则第3~9个字节中存储有数值“1024”。可以理解的,图2所示的布隆过滤器文件仅为一个示例,在具体实践中,数据段220包括的数据位的数量通常远大于1024,有时可以达到亿、甚至十亿量级。
数据段220包括从第10个字节开始往后的所有字节。如图2所示,数据段220包括1024个数据位(即数据位0~数据位1023),这些数据位的初始值均为0。
生产服务器110采用映射函数集合对数据元素集合中的多个数据元素进行映射,以更新数据段220中的各数据位的值。映射函数集合包括多个映射函数,例如,如图2所示,映射函数集合包括三个映射函数Hash1、Hash2和Hash3。以数据元素e1为例,采用映射函数Hash1、Hash2、Hash3分别对数据元素e1进行映射,得到映射值7、5、1022,相应地,将数据段中的偏移量(offset)为上述映射值的数据位的值置为1,即,将数据段220中的第7、5、1022个数据位的值置为1,如图2所示。类似地,采用映射函数Hash1、Hash2、Hash3分别对数据元素e2进行映射,得到映射值0、2、5,相应地,将数据段220中的偏移量(offset)为上述映射值的数据位的值置为1,即,将数据段中的第0、2、5个数据位的值置为1,如图2所示。
在将数据元素集合中的所有数据元素均映射到数据段220的数据位上之后,布隆过滤器文件200即生成完毕。
导入服务器120用于执行本公开的数据存储方法(例如下文的数据存储方法300),获取生产服务器110生成的布隆过滤器文件,将布隆过滤器文件的数据段拆分为多个数据子段,并将该布隆过滤器文件的配置段和多个数据子段存储至分布式存储集群130中。可以理解地,导入服务器120可以是单台服务器、多台服务器的集群、分布式系统、或者提供基础云服务(诸如云数据库、云计算、云存储、云通信)的云服务器。在一些实施例中,导入服务器120也可以是生产服务器110本身。
分布式存储集群130用于存储布隆过滤器文件。如图1所示,分布式存储集群130包括多个存储节点132(图1中示出了5个存储节点132-1~132-5),布隆过滤器文件的配置段和多个数据子段可以分别存储于不同的存储节点132中。根据一些实施例,分布式存储集群130可以是分布式内存集群,例如Redis集群、Memcache集群等。在分布式内存集群中,待查询的数据(就本公开而言,为布隆过滤器文件的配置段和多个数据子段)存储在各存储节点的内存中,大大提高了数据读写速度,从而提高了查询效率。
查询服务器140基于分布式存储集群130中存储的布隆过滤器文件,执行本公开实施例的数据查询方法(例如下文的数据查询方法400),接收客户端设备150发来的查询请求,并响应于查询请求,查询待查询元素是否存在于布隆过滤器文件的数据段所表示的数据元素集合中。可以理解地,查询服务器140可以是单台服务器、多台服务器的集群、分布式系统、或者提供基础云服务(诸如云数据库、云计算、云存储、云通信)的云服务器。
客户端设备150用于向查询服务器140发送数据查询请求,并接收查询服务器140返回的查询结果。客户端设备150例如可以是任何类型的移动计算机设备,包括移动计算机、移动电话、可穿戴式计算机设备(例如智能手表、头戴式设备,包括智能眼镜,等)或其他类型的移动设备。客户端设备110也可以是固定式计算机设备,例如台式机、服务器计算机或其他类型的固定式计算机设备。
图3示出了根据本公开实施例的数据存储方法300的流程图。方法300可以在导入服务器(例如,图1中所示的导入服务器120)处执行,也即,方法300的各个步骤的执行主体可以是图1中所示的导入服务器120。
如图3所示,方法300可以包括:
步骤S310、获取待存储的布隆过滤器文件,布隆过滤器文件包括配置段和数据段,数据段包括多个数据位,数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,配置段存储有上述多个数据位的数量和用于确定映射函数集合的配置信息;
步骤S320、将数据段拆分为多个数据子段;以及
步骤S330、将配置段和上述多个数据子段存储至分布式存储集群。
根据本公开的实施例,采用布隆过滤器文件的数据段来存储数据元素集合中的多个数据元素的映射值,并将该数据段拆分为多个数据子段,将各数据子段与布隆过滤器文件的配置段存储至分布式存储集群中。基于分布式存储集群中存储的布隆过滤器文件的配置段与各数据子段,可以高效地查询待查询元素是否存在于数据元素集合中。本公开的实施例将数据存储与数据查询解耦(数据查询方法于下文进行详述),并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
以下详细介绍方法300的各个步骤。
步骤S310中获取的布隆过滤器文件可以是生产服务器110生成的布隆过滤器文件,其例如可以具有如图2所示的结构。
根据一些实施例,如前所述,布隆过滤器文件的配置段中存储的配置信息包括布隆过滤器的类型和映射函数集合包括的映射函数的数量。布隆过滤器的类型可以是任意一种布隆过滤器的实现方式,例如可以是开源的Google Guava BloomFilter、CountingBloom Filter、Cuckoo Filter等,这些实现方式中定义了映射函数的数量和表达式,因此通过结合布隆过滤器的类型和映射函数的数量,即可确定相应的映射函数(即确定映射函数的表达式)。根据另一些实施例,配置信息也可以直接包括映射函数集合所包括的每一个映射函数的表达式。
在步骤S320中,将数据段拆分为多个数据子段。
将数据段拆分为多个数据子段有多种方式。根据一些实施例,方法300还包括步骤:预先设定每个数据子段包括的数据位的数量,相应地,步骤S320可以包括:根据预先设定的该数量,将数据段拆分为多个数据子段。例如,数据段的长度(即包括的数据位的数量)为1024bit,预先设定每个数据子段包括的数据位的数量为128bit,则可以将数据段拆分为1024/128=8个数据子段。
根据另一些实施例,方法300还包括步骤:预先设定多个数据子段的数量,相应地,步骤S320可以包括:根据预先设定的该数量,将数据段拆分为长度相同的数据子段。例如,数据段的长度为1024bit,预先设定数据子段的数量为16,则可以将数据段拆分为16个数据子段,每个数据子段的长度为1024/16=64bit。
可以理解的,除了以上两种实施例之外,还可以采用其他方式来将数据段拆分为多个数据子段,本公开对数据段的拆分方式不作限制。并且,在一些拆分方式中,得到的各个数据子段的长度可以不完全相同。
需要说明的是,在通过步骤S320将数据段拆分为多个数据子段后,各数据子段中的数据位仍沿用数据段中的数据位的编号,而不进行重新编号。例如,数据段中共有1024个数据位,其编号分别为0~1023。在将其拆分为8个128bit的数据子段0~7后,数据子段1中的数据位的编号为128~255,而不是0~127。
在步骤S330中,将配置段和多个数据子段存储至分布式存储集群。
根据一些实施例,分布式存储集群可以是分布式内存集群,例如Redis集群、Memcache集群等。在分布式内存集群中,配置段和多个数据子段存储在各存储节点的内存中,大大提高了数据读写速度,从而提高了查询效率。
根据一些实施例,步骤S330可以包括:确定配置段的第一标识;确定多个数据子段各自的第二标识;以及以键值对(Key-Value)的形式关联存储第一标识与配置段,并且关联存储第二标识与相应的数据子段。
根据一些实施例,第一标识可以包括布隆过滤器文件的标识信息和配置段的标识信息,每个第二标识包括布隆过滤器文件的标识信息和相应的数据子段在数据段中的偏移信息。
例如,布隆过滤器文件的标识信息可以是布隆过滤器文件的文件名(bloomfilter name),配置段的标识信息例如可以是一个预设的用于标识配置段的字符串(例如config),相应地,第一标识可以是布隆过滤器文件的文件名bloom filter name与用于标识配置段的字符串config的组合,即bloom filter name_config。以第一标识为Key,以配置段为Value,将二者关联存储。对于Redis等分布式内存集群,可以以Key-Value的形式将第一标识与配置段关联存储于内存中。
根据一些实施例,数据子段在数据段中的偏移信息可以是数据子段的编号,例如,数据段的长度为1024bit,预先设定每个数据子段包括的数据位的数量为128bit,则可以将数据段拆分为1024/128=8个数据子段,这8个数据子段的偏移信息分别为0~7。
根据另一些实施例,数据子段在数据段中的偏移信息可以是数据子段中的第一个数据位在数据段中的偏移量。例如,数据段的长度为1024bit,预先设定每个数据子段包括的数据位的数量为128bit,则可以将数据段拆分为1024/128=8个数据子段。第一个数据子段中的第一个数据位为数据段中的第0个数据位,相应地,其偏移信息为0;第二个数据子段中的第一个数据位为数据段中的第128个数据位,相应地,其偏移信息为128;第三个数据子段中的第一个数据位为数据段中的第256个数据位,相应地,其偏移信息为256,以此类推。
可以理解的,除上述实施例之外,还可以按照其他方式来设置数据子段在数据段中的偏移信息。本公开不限制偏移信息的具体设置方式,只要其能够唯一标识一个数据子段并且能够表明该数据子段在数据段中的位置即可。
在确定了各数据子段在数据段中的偏移信息之后,将布隆过滤器文件的标识信息与该偏移信息进行组合,即可得到各数据子段的第二标识。布隆过滤器文件的标识信息例如可以是布隆过滤器文件的文件名(bloom filter name),数据子段i在数据段中的偏移信息例如可以是offset(i),相应地,数据子段i的第二标识可以是bloom filter name_offset(i)。以第二标识为Key,以相应的数据子段为Value,将二者关联存储。对于Redis等分布式内存集群,可以以Key-Value的形式将第二标识与相应的数据子段关联存储于内存中。
根据一些实施例,如前所述,分布式存储集群可以包括多个存储节点。相应地,在步骤S330中,可以将配置段存储至上述多个存储节点中的至少一个存储节点;以及将多个数据子段分别存储至多个存储节点中的至少两个存储节点。通过将多个数据子段分别存储至多个存储节点中的至少两个存储节点,可以实现多个数据子段的分散存储和并行查询,从而提高数据查询效率。
根据一些实施例,可以采用轮询的方式将各数据子段存储至多个存储节点中,即,可以循环地将各数据子段存储至多个存储节点中。例如,数据段被拆分为8个数据子段,即数据子段0~7。分布式存储集群如图1所示,包括5个存储节点132-1~132-5。在第一个循环中,可以将数据子段0~4分别存储至存储节点132-1~132-5,在第二个循环中,将数据子段5~7分别存储至存储节点132-1~132-3。
进一步地,还可以在分布式存储集群中存储各数据子段的一个或多个副本,从而避免因单各存储节点失效而导致的查询服务不可用。
基于分布式存储集群中存储的布隆过滤器文件的配置段和多个数据子段,本公开还提供一种数据查询方法。图4示出了根据本公开实施例的数据查询方法400的流程图。方法400可以在查询服务器(例如,图1中所示的查询服务器140)处执行,也即,方法400的各个步骤的执行主体可以是图1中所示的查询服务器140。
如图4所示,方法400可以包括:
步骤S410、接收数据查询请求,数据查询请求包括待查询元素和布隆过滤器文件的标识信息,布隆过滤器文件包括配置段和数据段,配置段存储有用于确定映射函数集合的配置信息,数据段包括多个数据子段,配置段和上述多个数据子段存储于分布式存储集群中;
步骤S420、通过查述配置段,确定用于对待查询元素进行映射的映射函数集合;
步骤S430、利用映射函数集合对待查询元素进行映射,得到多个偏移量,每个偏移量指示布隆过滤器文件的数据段中的一个数据位;
步骤S440、确定多个偏移量各自相应的数据位所在的数据子段;以及
步骤S450、通过查询相应的数据子段中的相应数据位,确定待查询元素是否为布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
根据本公开的实施例,采用布隆过滤器文件的数据段来存储数据元素集合中的多个数据元素的映射值,并将该数据段拆分为多个数据子段,将各数据子段与布隆过滤器文件的配置段存储至分布式存储集群中。基于分布式存储集群中存储的布隆过滤器文件的配置段与各数据子段,可以高效地查询待查询元素是否存在于数据元素集合中。本公开的实施例将数据存储与数据查询解耦,并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
以下详细介绍方法400的各个步骤。
步骤S410中的数据查询请求例如可以由客户端设备(例如图1中示出的客户端设备150)发出。
根据一些实施例,布隆过滤器文件的配置段包括布隆过滤器的类型和映射函数集合包括的映射函数的数量,相应地,步骤S420进一步包括:根据布隆过滤器的类型和映射函数的数量,确定映射函数集合。如前所述,布隆过滤器的类型可以是任意一种布隆过滤器的实现方式,例如可以是开源的Google Guava BloomFilter、Counting Bloom Filter、Cuckoo Filter等,这些实现方式中定义了映射函数的数量和表达式,因此通过结合布隆过滤器的类型和映射函数的数量,即可确定相应的映射函数集合(即确定映射函数集合中的各映射函数的表达式)。
根据另一些实施例,配置段也可以包括映射函数集合所包括的每一个映射函数的表达式,相应地,在步骤S420中,通过读取配置段,即可确定映射函数集合。
根据一些实施例,映射函数集合包括多个映射函数,相应地,在步骤S430中,分别采用上述多个映射函数中的每一个映射函数对待查询元素进行映射,得到每一个映射函数对应的偏移量。例如,映射函数集合中包括三个映射函数Hash1、Hash2、Hash3,待查询元素为query。分别采用Hash1、Hash2、Hash3对query进行映射,得到每个映射函数对应的偏移量offset1、offest2、offset3,其中offset1=Hash1(query),offset2=Hash2(query),offset3=Hash3(query)。每个偏移量指示布隆过滤器文件的数据段中的一个数据位。例如,偏移量offset1指示布隆过滤器文件的数据段中的第offset1个数据位。
在步骤S440中,确定步骤S430得到的多个偏移量各自相应的数据位所在的数据子段。步骤S440的确定数据子段的方式与前述步骤S320的数据子段的拆分结果相对应。例如,数据段的长度为1024bit,在前述步骤S320中,将数据段拆分为8个长度为128bit的数据子段,那么在步骤S440中,可以用偏移量除以128,从而得到该偏移量对应的数据子段的编号。
根据一些实施例,在步骤S450中,响应于确定上述多个偏移量各自相应的数据位的值均为1,判定待查询元素为布隆过滤器文件的数据段所表示的数据元素集合中的数据元素,即待查询元素属于数据元素集合。若存在至少一个偏移量相应的数据位的值为0,则确定待查询元素不是布隆过滤器文件的数据段所表示的数据元素集合中的数据元素,即该待查询元素不属于数据元素集合。
仍以图2为例进行说明。图2所示的数据段被拆分为8个长度为128bit的数据子段,记为数据子段0~7。例如,分别采用映射函数Hash1、Hash2、Hash3对待查询元素query1进行映射,得到偏移量0、2、5,对应的数据位分别为数据位0、2、5。分别用偏移量0、2、5除以128,得到的商均为0,因此偏移量0、2、5相应的数据位0、2、5均位于数据子段0中。查询数据子段0中的数据位0、2、5的值。由于数据位0、2、5的值均为1,因此判定待查询元素query1是布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
又例如,分别采用映射函数Hash1、Hash2、Hash3对待查询元素query2进行映射,得到偏移量6、7、1023,对应的数据位分别为数据位6、7、1023。分别用偏移量6、7、1023除以128,得到的商为0、0、7,因此偏移量6、7相应的数据位6、7位于数据子段0中,偏移量1023相应的数据位1023位于数据子段7中。查询数据子段0中的数据位6、7的值,并且查询数据子段7中的数据位1023的值。由于数据位6和数据为1023的值为0,因此判定待查询元素query2不是布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
根据本公开的另一方面,还提供一种数据存储装置。图5示出了根据本公开实施例的数据存储装置500的结构框图。如图5所示,装置500可以包括获取模块510、拆分模块520和导入模块530。
获取模块510,用于获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息。
拆分模块520,用于将所述数据段拆分为多个数据子段。
导入模块530,用于将所述配置段和所述多个数据子段存储至分布式存储集群。
采用布隆过滤器文件的数据段来存储数据元素集合中的多个数据元素的映射值,并将该数据段拆分为多个数据子段,将各数据子段与布隆过滤器文件的配置段存储至分布式存储集群中。基于分布式存储集群中存储的布隆过滤器文件的配置段与各数据子段,可以高效地查询待查询元素是否存在于数据元素集合中。本公开的实施例将数据存储与数据查询解耦,并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
根据本公开的另一方面,还提供一种数据查询装置。图6示出了根据本公开实施例的数据查询装置600的结构框图。如图6所示,装置600可以包括请求接收模块610、函数确定模块620、映射模块630、定位模块640和查询模块650。
请求接收模块610,用于接收数据查询请求,数据查询请求包括待查询元素和布隆过滤器文件的标识信息,布隆过滤器文件包括配置段和数据段,数据段包括多个数据子段,配置段和多个数据子段存储于分布式存储集群中。
函数确定模块620,用于通过查询配置段,确定用于对待查询元素进行映射的映射函数集合。
映射模块630,用于利用映射函数集合对待查询元素进行映射,得到多个偏移量,每个偏移量对应于布隆过滤器文件的数据段中的一个数据位。
定位模块640,用于确定多个偏移量各自相应的数据子段。
查询模块650,通过查询相应的数据子段中的相应数据位,确定待查询元素是否为布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
采用布隆过滤器文件的数据段来存储数据元素集合中的多个数据元素的映射值,并将该数据段拆分为多个数据子段,将各数据子段与布隆过滤器文件的配置段存储至分布式存储集群中。基于分布式存储集群中存储的布隆过滤器文件的配置段与各数据子段,可以高效地查询待查询元素是否存在于数据元素集合中。本公开的实施例将数据存储与数据查询解耦,并采用分布式存储集群来存储布隆过滤器文件,避免了因数据存储与数据查询相互影响而造成的数据查询服务失效,提高了数据查询服务的可用性、易维护性和查询效率。
应当理解,图5中所示装置500的各个模块可以与参考图3描述的方法300中的各个步骤相对应,图6中所示的装置600的各个模块可以与参考图4描述的方法400中的各个步骤相对应。由此,上面针对方法300、400描述的操作、特征和优点同样适用于装置500、600及其所包括的模块/单元。为了简洁起见,某些操作、特征和优点在此不再赘述。
虽然上面参考特定模块讨论了特定功能,但是应当注意,本文讨论的各个模块的功能可以分为多个模块,和/或多个模块的至少一些功能可以组合成单个模块。例如,上面描述的函数确定模块620和映射模块630在一些实施例中可以组合成单个模块。
还应当理解,本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。上面关于图5、图6描述的各个模块可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些模块可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些模块可以被实现为硬件逻辑/电路。例如,在一些实施例中,上述获取模块510、拆分模块520、导入模块530、请求接收模块610、函数确定模块620、映射模块630、定位模块640、查询模块650中的一个或多个可以一起被实现在片上系统(System on Chip, SoC)中。SoC可以包括集成电路芯片(其包括处理器(例如,中央处理单元(Central Processing Unit, CPU)、微控制器、微处理器、数字信号处理器(Digital Signal Processor, DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
根据本公开的另一方面,还提供一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据上述的数据存储方法或数据查询方法。
根据本公开的另一方面,还提供一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据上述的数据存储方法或数据查询方法。
根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据上述的数据存储方法或数据查询方法。
在下文中,结合图7描述这样的计算机设备、非暂态计算机可读存储介质和计算机程序产品的说明性示例。
图7示出了可以被用来实施本文所描述的方法的计算机设备700的示例配置。举例来说,图1中所示的生产服务器110、导入服务器120、分布式存储集群130中的各存储节点、查询服务器140、客户端设备150中的一个或多个可以包括类似于计算机设备700的架构。上述数据存储装置500或数据查询装置600也可以全部或至少部分地由计算机设备700或类似设备或系统实现。
计算机设备700可以是各种不同类型的设备,例如服务提供商的服务器、与客户端(例如,客户端设备)相关联的设备、片上系统、和/或任何其它合适的计算机设备或计算系统。计算机设备700的示例包括但不限于:台式计算机、服务器计算机、笔记本电脑或上网本计算机、移动设备(例如,平板电脑、蜂窝或其他无线电话(例如,智能电话)、记事本计算机、移动台)、可穿戴设备(例如,眼镜、手表)、娱乐设备(例如,娱乐器具、通信地耦合到显示设备的机顶盒、游戏机)、电视或其他显示设备、汽车计算机等等。因此,计算机设备700的范围可以从具有大量存储器和处理器资源的全资源设备(例如,个人计算机、游戏控制台)到具有有限的存储器和/或处理资源的低资源设备(例如,传统的机顶盒、手持游戏控制台)。
计算机设备700可以包括能够诸如通过系统总线714或其他适当的连接彼此通信的至少一个处理器702、存储器704、(多个)通信接口706、显示设备708、其他输入/输出(I/O)设备710以及一个或更多大容量存储设备712。
处理器702可以是单个处理单元或多个处理单元,所有处理单元可以包括单个或多个计算单元或者多个核心。处理器702可以被实施成一个或更多微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。除了其他能力之外,处理器702可以被配置成获取并且执行存储在存储器704、大容量存储设备712或者其他计算机可读介质中的计算机可读指令,诸如操作系统716的程序代码、应用程序718的程序代码、其他程序720的程序代码等。
存储器704和大容量存储设备712是用于存储指令的计算机可读存储介质的示例,所述指令由处理器702执行来实施前面所描述的各种功能。举例来说,存储器704一般可以包括易失性存储器和非易失性存储器二者(例如RAM、ROM等等)。此外,大容量存储设备712一般可以包括硬盘驱动器、固态驱动器、可移除介质、包括外部和可移除驱动器、存储器卡、闪存、软盘、光盘(例如CD、DVD)、存储阵列、网络附属存储、存储区域网等等。存储器704和大容量存储设备712在本文中都可以被统称为存储器或计算机可读存储介质,并且可以是能够把计算机可读、处理器可执行程序指令存储为计算机程序代码的非暂态介质,所述计算机程序代码可以由处理器702作为被配置成实施在本文的示例中所描述的操作和功能的特定机器来执行。
多个程序模块可以存储在大容量存储设备712上。这些程序包括操作系统716、一个或多个应用程序718、其他程序720和程序数据722,并且它们可以被加载到存储器704以供执行。这样的应用程序或程序模块的示例可以包括例如用于实现以下部件/功能的计算机程序逻辑(例如,计算机程序代码或指令):服务端应用112(包括上述获取模块510、拆分模块520、导入模块530,或者包括上述请求接收模块610、函数确定模块620、映射模块630、定位模块640、查询模块650)、方法300或400(包括方法300或400的任何合适的步骤)、和/或本文描述的另外的实施例。
虽然在图7中被图示成存储在计算机设备700的存储器704中,但是模块716、718、720和722或者其部分可以使用可由计算机设备700访问的任何形式的计算机可读介质来实施。如本文所使用的,“计算机可读介质”至少包括两种类型的计算机可读介质,也就是计算机存储介质和通信介质。
计算机存储介质包括通过用于存储信息的任何方法或技术实施的易失性和非易失性、可移除和不可移除介质,所述信息诸如是计算机可读指令、数据结构、程序模块或者其他数据。计算机存储介质包括而不限于RAM、ROM、EEPROM、闪存或其他存储器技术,CD-ROM、数字通用盘(DVD)、或其他光学存储装置,磁盒、磁带、磁盘存储装置或其他磁性存储设备,或者可以被用来存储信息以供计算机设备访问的任何其他非传送介质。
与此相对,通信介质可以在诸如载波或其他传送机制之类的已调数据信号中具体实现计算机可读指令、数据结构、程序模块或其他数据。本文所定义的计算机存储介质不包括通信介质。
计算机设备700还可以包括一个或更多通信接口706,以用于诸如通过网络、直接连接等等与其他设备交换数据,正如前面所讨论的那样。这样的通信接口可以是以下各项中的一个或多个:任何类型的网络接口(例如,网络接口卡(NIC))、有线或无线(诸如IEEE802.11无线LAN(WLAN))无线接口、全球微波接入互操作(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、BluetoothTM接口、近场通信(NFC)接口等。通信接口706可以促进在多种网络和协议类型内的通信,其中包括有线网络(例如LAN、电缆等等)和无线网络(例如WLAN、蜂窝、卫星等等)、因特网等等。通信接口706还可以提供与诸如存储阵列、网络附属存储、存储区域网等等中的外部存储装置(未示出)的通信。
在一些示例中,可以包括诸如监视器之类的显示设备708,以用于向用户显示信息和图像。其他I/O设备710可以是接收来自用户的各种输入并且向用户提供各种输出的设备,并且可以包括触摸输入设备、手势输入设备、摄影机、键盘、遥控器、鼠标、打印机、音频输入/输出设备等等。
以下描述本公开的一些示例性方面。
方面1. 一种数据存储方法,包括:
获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;
将所述数据段拆分为多个数据子段;以及
将所述配置段和所述多个数据子段存储至分布式存储集群。
方面2. 如方面1所述的方法,其中,所述配置信息包括布隆过滤器的类型和所述映射函数集合包括的映射函数的数量。
方面3. 如方面1或2所述的方法,还包括:预先设定每个数据子段包括的数据位的数量,其中,将所述数据段拆分为多个数据子段包括:
根据预先设定的所述数量,将所述数据段拆分为所述多个数据子段。
方面4. 如方面1或2所述的方法,还包括:预先设定所述多个数据子段的数量,其中,将所述数据段拆分为多个数据子段包括:
根据预先设定的所述数量,将所述数据段拆分为长度相同的数据子段。
方面5. 如方面1-4所述的方法,其中,将所述配置段和所述多个数据子段存储至分布式存储集群包括:
确定所述配置段的第一标识;
确定所述多个数据子段各自的第二标识;以及
以键值对的形式关联存储所述第一标识与所述配置段,并且关联存储所述第二标识与相应的数据子段。
方面6. 如方面5所述的方法,其中,所述第一标识包括所述布隆过滤器文件的标识信息和所述配置段的标识信息,每个所述第二标识包括所述布隆过滤器文件的标识信息和相应的数据子段在所述数据段中的偏移信息。
方面7. 如方面1-6中任一项所述的方法,其中,所述分布式存储集群包括多个存储节点,并且
其中,将所述配置段和所述多个数据子段存储至分布式存储集群包括:
将所述配置段存储至所述多个存储节点中的至少一个存储节点;以及
将所述多个数据子段分别存储至所述多个存储节点中的至少两个存储节点。
方面8. 如方面1-7中任一项所述的方法,其中,所述分布式存储集群为分布式内存集群。
方面9. 如方面1-8中任一项所述的方法,其中,所述方法由导入服务器执行。
方面10. 一种数据查询方法,包括:
接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;
通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;
利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;
确定所述多个偏移量各自相应的数据位所在的数据子段;以及
通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
方面11. 如方面10所述的方法,其中,所述配置段包括布隆过滤器的类型和所述映射函数集合包括的映射函数的数量,并且
其中,确定用于对所述待查询元素进行映射的映射函数集合包括:根据所述布隆过滤器的类型和所述映射函数的数量,确定所述映射函数集合。
方面12. 如方面10或11所述的方法,其中,所述映射函数集合包括多个映射函数,并且
其中,利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量包括:
分别采用所述多个映射函数中的每一个映射函数对所述待查询元素进行映射,得到每一个映射函数对应的偏移量。
方面13. 如方面10-12中任一项所述的方法,其中,通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素包括:
响应于确定所述多个偏移量各自相应的数据位的值均为1,判定所述待查询元素为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
方面14. 如方面10-13中任一项所述的方法,其中,所述方法由查询服务器执行。
方面15. 一种数据存储装置,包括:
获取模块,用于获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;
拆分模块,用于将所述数据段拆分为多个数据子段;以及
导入模块,用于将所述配置段和所述多个数据子段存储至分布式存储集群。
方面16. 一种数据查询装置,包括:
请求接收模块,用于接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;
函数确定模块,用于通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;
映射模块,用于利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;
定位模块,用于确定所述多个偏移量各自相应的数据子段;以及
查询模块,通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
方面17. 一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据方面1-14中任一项所述的方法。
方面18. 一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据方面1-14中任一项所述的方法。
方面19. 一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据方面1-14中任一项所述的方法。
虽然在附图和前面的描述中已经详细地说明和描述了本公开,但是这样的说明和描述应当被认为是说明性的和示意性的,而非限制性的;本公开不限于所公开的实施例。通过研究附图、公开内容和所附的权利要求书,本领域技术人员在实践所要求保护的主题时,能够理解和实现对于所公开的实施例的变型。在权利要求书中,词语“包括”不排除未列出的其他元件或步骤,并且词语“一”或“一个”不排除多个。在相互不同的从属权利要求中记载了某些措施的仅有事实并不表明这些措施的组合不能用来获益。
Claims (16)
1.一种数据存储方法,包括:
获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;
将所述数据段拆分为多个数据子段;以及
将所述配置段和所述多个数据子段存储至分布式存储集群,
其中,所述将所述配置段和所述多个数据子段存储至分布式存储集群包括:
确定所述配置段的第一标识,其中,所述第一标识包括所述布隆过滤器文件的标识信息和所述配置段的标识信息;
确定所述多个数据子段各自的第二标识,其中,每个所述第二标识包括所述布隆过滤器文件的标识信息和相应的数据子段在所述数据段中的偏移信息,所述偏移信息指示所述数据子段在所述数据段中的位置;以及
以键值对的形式关联存储所述第一标识与所述配置段,并且关联存储所述第二标识与相应的数据子段。
2.如权利要求1所述的方法,其中,所述配置信息包括布隆过滤器的类型和所述映射函数集合包括的映射函数的数量。
3.如权利要求1或2所述的方法,还包括:预先设定每个数据子段包括的数据位的数量,其中,将所述数据段拆分为多个数据子段包括:
根据预先设定的所述数量,将所述数据段拆分为所述多个数据子段。
4.如权利要求1或2所述的方法,还包括:预先设定所述多个数据子段的数量,其中,将所述数据段拆分为多个数据子段包括:
根据预先设定的所述数量,将所述数据段拆分为长度相同的数据子段。
5.如权利要求1所述的方法,其中,所述分布式存储集群包括多个存储节点,并且
其中,将所述配置段和所述多个数据子段存储至分布式存储集群包括:
将所述配置段存储至所述多个存储节点中的至少一个存储节点;以及
将所述多个数据子段分别存储至所述多个存储节点中的至少两个存储节点。
6.如权利要求1所述的方法,其中,所述分布式存储集群为分布式内存集群。
7.如权利要求1所述的方法,其中,所述方法由导入服务器执行。
8.一种数据查询方法,包括:
接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;
通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;
利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;
确定所述多个偏移量各自相应的数据位所在的数据子段;以及
通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
9.如权利要求8所述的方法,其中,所述配置段包括布隆过滤器的类型和所述映射函数集合包括的映射函数的数量,并且
其中,确定用于对所述待查询元素进行映射的映射函数集合包括:根据所述布隆过滤器的类型和所述映射函数的数量,确定所述映射函数集合。
10.如权利要求8或9所述的方法,其中,所述映射函数集合包括多个映射函数,并且
其中,利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量包括:
分别采用所述多个映射函数中的每一个映射函数对所述待查询元素进行映射,得到每一个映射函数对应的偏移量。
11.如权利要求8所述的方法,其中,通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素包括:
响应于确定所述多个偏移量各自相应的数据位的值均为1,判定所述待查询元素为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
12.如权利要求8所述的方法,其中,所述方法由查询服务器执行。
13.一种数据存储装置,包括:
获取模块,用于获取待存储的布隆过滤器文件,所述布隆过滤器文件包括配置段和数据段,所述数据段包括多个数据位,所述数据位的值通过采用映射函数集合对数据元素集合中的多个数据元素进行映射来确定,所述配置段存储有所述多个数据位的数量和用于确定所述映射函数集合的配置信息;
拆分模块,用于将所述数据段拆分为多个数据子段;以及
导入模块,用于将所述配置段和所述多个数据子段存储至分布式存储集群,
其中,所述将所述配置段和所述多个数据子段存储至分布式存储集群包括:
确定所述配置段的第一标识,其中,所述第一标识包括所述布隆过滤器文件的标识信息和所述配置段的标识信息;
确定所述多个数据子段各自的第二标识,其中,每个所述第二标识包括所述布隆过滤器文件的标识信息和相应的数据子段在所述数据段中的偏移信息,所述偏移信息指示所述数据子段在所述数据段中的位置;以及
以键值对的形式关联存储所述第一标识与所述配置段,并且关联存储所述第二标识与相应的数据子段。
14.一种数据查询装置,包括:
请求接收模块,用于接收数据查询请求,所述数据查询请求包括待查询元素和布隆过滤器文件的标识信息,所述布隆过滤器文件包括配置段和数据段,所述配置段存储有用于确定所述映射函数集合的配置信息,所述数据段包括多个数据子段,所述配置段和所述多个数据子段存储于分布式存储集群中;
函数确定模块,用于通过查询所述配置段,确定用于对所述待查询元素进行映射的映射函数集合;
映射模块,用于利用所述映射函数集合对所述待查询元素进行映射,得到多个偏移量,每个所述偏移量指示所述布隆过滤器文件的数据段中的一个数据位;
定位模块,用于确定所述多个偏移量各自相应的数据子段;以及
查询模块,通过查询相应的数据子段中的相应数据位,确定所述待查询元素是否为所述布隆过滤器文件的数据段所表示的数据元素集合中的数据元素。
15.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有计算机程序,所述计算机程序在被所述至少一个处理器执行时实现根据权利要求1-12中任一项所述的方法。
16.一种存储有计算机程序的非瞬时计算机可读存储介质,其中,所述计算机程序在被处理器执行时实现根据权利要求1-12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110857646.1A CN113486025B (zh) | 2021-07-28 | 2021-07-28 | 数据存储方法、数据查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110857646.1A CN113486025B (zh) | 2021-07-28 | 2021-07-28 | 数据存储方法、数据查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113486025A CN113486025A (zh) | 2021-10-08 |
CN113486025B true CN113486025B (zh) | 2023-07-25 |
Family
ID=77944226
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110857646.1A Active CN113486025B (zh) | 2021-07-28 | 2021-07-28 | 数据存储方法、数据查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113486025B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116258524B (zh) * | 2023-03-14 | 2024-02-02 | 深圳乐信软件技术有限公司 | 基于布隆过滤器的广告投放方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105027527A (zh) * | 2012-12-31 | 2015-11-04 | 华为技术有限公司 | 拥有最长前缀匹配交换机的可扩展存储系统 |
CN107870970A (zh) * | 2017-09-06 | 2018-04-03 | 北京理工大学 | 一种数据存储查询方法及系统 |
CN108089816A (zh) * | 2017-11-14 | 2018-05-29 | 西北工业大学 | 一种基于负载均衡的查询式重复数据删除方法及装置 |
CN108334520A (zh) * | 2017-01-19 | 2018-07-27 | 北京京东尚科信息技术有限公司 | 社交网络数据处理方法、装置、存储介质及电子设备 |
CN110472167A (zh) * | 2019-06-03 | 2019-11-19 | 北京京东振世信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN110851758A (zh) * | 2019-10-30 | 2020-02-28 | 深圳前海微众银行股份有限公司 | 一种网页访客数量统计方法及装置 |
CN111858651A (zh) * | 2020-09-22 | 2020-10-30 | 中国人民解放军国防科技大学 | 一种数据处理方法以及数据处理装置 |
CN112487009A (zh) * | 2020-12-14 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 数据更新方法、装置、设备、存储介质及程序产品 |
-
2021
- 2021-07-28 CN CN202110857646.1A patent/CN113486025B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105027527A (zh) * | 2012-12-31 | 2015-11-04 | 华为技术有限公司 | 拥有最长前缀匹配交换机的可扩展存储系统 |
CN108334520A (zh) * | 2017-01-19 | 2018-07-27 | 北京京东尚科信息技术有限公司 | 社交网络数据处理方法、装置、存储介质及电子设备 |
CN107870970A (zh) * | 2017-09-06 | 2018-04-03 | 北京理工大学 | 一种数据存储查询方法及系统 |
CN108089816A (zh) * | 2017-11-14 | 2018-05-29 | 西北工业大学 | 一种基于负载均衡的查询式重复数据删除方法及装置 |
CN110472167A (zh) * | 2019-06-03 | 2019-11-19 | 北京京东振世信息技术有限公司 | 数据管理方法、装置及计算机可读存储介质 |
CN110851758A (zh) * | 2019-10-30 | 2020-02-28 | 深圳前海微众银行股份有限公司 | 一种网页访客数量统计方法及装置 |
CN111858651A (zh) * | 2020-09-22 | 2020-10-30 | 中国人民解放军国防科技大学 | 一种数据处理方法以及数据处理装置 |
CN112487009A (zh) * | 2020-12-14 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 数据更新方法、装置、设备、存储介质及程序产品 |
Non-Patent Citations (2)
Title |
---|
一种基于源端数据重删的数据备份和恢复系统设计与实现;王兴虎;何安元;;南京师大学报(自然科学版)(第02期);全文 * |
基于布隆过滤器的海量数据查询技术的优化与应用;饶文;陈旭;;微型电脑应用(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113486025A (zh) | 2021-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10073916B2 (en) | Method and system for facilitating terminal identifiers | |
JP6626211B2 (ja) | ショートリンクを処理する方法及び装置並びにショートリンクサーバ | |
CN110943961B (zh) | 数据处理方法、设备以及存储介质 | |
US20170364697A1 (en) | Data interworking method and data interworking device | |
CN110019004B (zh) | 一种数据处理方法、装置及系统 | |
CN107911249B (zh) | 一种网络设备的命令行发送方法、装置和设备 | |
CN107181686B (zh) | 路由表的同步方法、装置及系统 | |
US10250521B2 (en) | Data stream identifying method and device | |
JP7397094B2 (ja) | リソース構成方法、リソース構成装置、コンピューター機器、及びコンピュータープログラム | |
CN108667840B (zh) | 注入漏洞检测方法及装置 | |
JP2012089094A5 (zh) | ||
WO2021203319A1 (zh) | 数据查询方法、装置及服务器 | |
WO2013152729A1 (zh) | 用于向终端设备提供软件的方法及装置 | |
CN110851474A (zh) | 数据查询方法、数据库中间件、数据查询设备及存储介质 | |
US20230359628A1 (en) | Blockchain-based data processing method and apparatus, device, and storage medium | |
CN111803917A (zh) | 资源的处理方法和装置 | |
CN113486025B (zh) | 数据存储方法、数据查询方法及装置 | |
US9195664B2 (en) | Method and device based on android system for tracking imported file | |
CN108737487B (zh) | 数据同步方法和装置、存储介质及电子装置 | |
WO2021226822A1 (zh) | 日志写入方法、装置、电子设备以及存储介质 | |
CN113467823B (zh) | 一种配置信息的获取方法、装置、系统及存储介质 | |
CN107977381B (zh) | 数据配置方法、索引管理方法、相关装置以及计算设备 | |
CN110781375A (zh) | 一种用户状态标识确定方法及装置 | |
CN110503504B (zh) | 网络产品的信息识别方法、装置及设备 | |
CN114153910A (zh) | 数据采集方法、装置及电子装置、计算机程序产品 |
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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40062600 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |