CN108140050B - 一种使用布隆过滤器过滤文件的方法及装置 - Google Patents
一种使用布隆过滤器过滤文件的方法及装置 Download PDFInfo
- Publication number
- CN108140050B CN108140050B CN201680059828.1A CN201680059828A CN108140050B CN 108140050 B CN108140050 B CN 108140050B CN 201680059828 A CN201680059828 A CN 201680059828A CN 108140050 B CN108140050 B CN 108140050B
- Authority
- CN
- China
- Prior art keywords
- bloom filter
- size
- row
- row key
- coarse
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种使用布隆过滤器过滤文件的方法,该方法应用于非关系型存储***,用于解决现有技术中使用布隆过滤器过滤文件时消耗大量计算资源的问题。该方法包括:确定第一布隆过滤器对应的第一行键数;获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;根据所述第一行键数查询所述第一表图中是否存在所述第一布隆过滤器的大小;当所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
Description
技术领域
本发明涉及数据查询领域,具体涉及一种使用布隆过滤器过滤文件的方法及装置。
背景技术
基于结构日志合并树(英文全称:Log Structured Merge-Tree,缩写:LSM-Tree)的非关系型存储***,在互联网被广泛应用。如图1-a所示,例如:将客户端发送的数据先在内存中暂时记录,当记录的数据量达到一定门限值时,再把数据一次性顺序写入磁盘,从而减少磁盘中磁头定位的时间,缓解磁盘压力。同时,基于LSM-Tree的非关系型存储***,一般使用键-值(key-value)数据模型来记录数据,如图1-b所示,其中,一个行键(rowkey)所带的所有字段的数据分散在多个文件中,而布隆过滤器是一种优化手段,可以快速过滤到不可能存在待查询rowkey的文件。
在进行数据写文件之前,每个rowkey首先通过k个不同的哈希(hash)函数计算生成k个不同的hash值,并在空的布隆过滤器(bloomfilter)中***k个不同的hash值。
如图1-c所示,在空的布隆过滤器中使用的元素个数都是实际的元素个数,计算出的hash值基本都不相同,这样导致无法复用hash函数计算的结果。则使用布隆过滤器进行文件过滤时,每个rowkey都要计算k次hash值,从而消耗大量的计算资源。
发明内容
本发明实施例提供了一种使用布隆过滤器过滤文件的方法及装置,用于解决现有技术中使用布隆过滤器过滤文件时消耗大量计算资源的问题。
第一方面提供一种使用布隆过滤器过滤文件的方法,所述方法应用于非关系型存储***,所述方法包括:确定第一布隆过滤器对应的第一行键数,其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数;获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;根据所述第一行键数查询所述第一表图中是否存在所述第一布隆过滤器的大小;当所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
可见,在使用布隆过滤器过滤文件时,首先确定第一布隆过滤器(即:待过滤文件所对应的布隆过滤器)对应的第一行键数,其中,该第一行键数是第一布隆过滤器的粗粒度行键数,即:按照目标规则将第一布隆过滤器的实际行键数所在的区间取右边界值,将此右边界值作为第一布隆过滤器的第一行键数,进一步,根据第一行键数查询第一表图中是否存在第一布隆过滤器的大小,当第一表图中存在第一布隆过滤器的大小时,则根据第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。可见,取第一布隆过滤器的粗粒度行键数可以有效提高相同大小的第一布隆过滤器的数量,并且使得第一布隆过滤器的大小所对应的哈希值集合被复用,从而减少了过滤文件的开销。
在一些可能的实现方式中,当所述第一表图中不存在所述第一布隆过滤器的大小时,所述方法还包括:根据所述第一行键数确定所述第一布隆过滤器的大小;根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合;保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
可见,当第一表图中不存在第一布隆过滤器的大小时,可以根据第一行键数确定出第一布隆过滤器的大小,进而确定出第一行键数中对应的每个行键所对应的哈希值,生成第一布隆过滤器的大小所对应的哈希值集合,保存第一行键数,第一布隆过滤器大小以及哈希值集合之间的对应关系,以便下次遇到与第一布隆过滤器相同大小的文件时过滤使用,从而减少过滤文件的计算资源。
在另一些可能的实现方式中,所述确定第一布隆过滤器对应的第一行键数包括:获取所述第一布隆过滤器的实际行键数;按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;选取所述第一区间的右边界值确定为所述第一行键数。
可见,按照目标规则将第一布隆过滤器的实际行键数划分至对应的第一区间,并且取第一区间的右边界值作为第一行键数,例如:假设第一布隆过滤器的实际行键数是230,而目标规则是按照每300的行键数划分一个区间,即:1至300为第一区间,301至600为第二区间,601至900为第三区间等,则取230所在的第一区间的右边界值300作为第一行键数。
在另一些可能的实现方式中,所述获取第一表图之前,所述方法还包括:确定布隆过滤器的粗粒度行键数;根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
在实际应用中,获取第一表图之间,则需要生成第一表图,具体生成的第一表图的过程为:先确定当前每个布隆过滤器的粗粒度行键数,根据当前每个布隆过滤器的粗粒度行键数确定布隆过滤器的大小,进而根据粗粒度行键数对应的每个行键确定对应的哈希值,所有的哈希值组成哈希值集合,从而保存布隆过滤器的粗粒度行键数,布隆过滤器的大小以及哈希值集合之间的对应关系,以便过滤文件时根据第一表图查询到相同大小的布隆过滤器时,复用哈希值集合,从而减少过滤文件时的计算资源。
在另一些可能的实现方式中,所述确定布隆过滤器的粗粒度行键数包括:获取布隆过滤器的实际行键数;按照所述目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
可见,具体确定当前每个布隆过滤器的行键数的过程为:获取布隆过滤器的实际行键数,按照目标规则将布隆过滤器的实际行键数划分至对应的区间内,并选取区间的右边界值作为布隆过滤器的粗粒度行键值,例如:当前有五个布隆过滤器,每个布隆过滤器的实际行键数分别为211,340,532,160,832。假设目标规则为每300个行键数划分为一个区间,则对应的区间分别为0至300,301至600,601至900,则上述五个实际行键数对应的粗粒度行键数分别为300,600,600,300,900。当然,在实际应用中,可根据每个布隆过滤器的实际行键数确定目标规则的精确度,例如:布隆过滤器的实际行键数之间的差距比较近,可以缩小划分区间的范围,此处不做具体限定。
在另一些可能的实现方式中,所述根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,所述方法还包括:将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
在实际应用中,当确定每个行键对应的哈希值后,将每个哈希值***至对应的布隆过滤器上,并将每个哈希值对应的位置置为1,从而方便后续使用布隆过滤器过滤文件,例如:确定待查询的行键所对应的每个哈希值,然后再布隆过滤器对应的位置上进行判断,如果有任意一个位置的值为0,则确定该行键不在该文件中,从而不必过滤该文件,减少过滤该文件的开销。
本发明第二方面提供一种布隆过滤器管理装置,所述布隆过滤器管理装置应用于非关系型存储***,所述布隆过滤器管理装置包括:
确定模块,用于确定第一布隆过滤器对应的第一行键数,其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数;
获取模块,用于获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;
查询模块,用于根据所述确定模块确定的所述第一行键数查询所述获取模块获取的所述第一表图中是否存在所述第一布隆过滤器的大小;
过滤模块,用于当所述查询模块查询到所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
可见,确定模块首先确定第一布隆过滤器(即:待过滤文件所对应的布隆过滤器)对应的第一行键数,其中,该第一行键数是第一布隆过滤器的粗粒度行键数,即:按照目标规则将第一布隆过滤器的实际行键数所在的区间取右边界值,将此右边界值作为第一布隆过滤器的第一行键数,进一步,查询模块根据第一行键数查询第一表图中是否存在第一布隆过滤器的大小,当第一表图中存在第一布隆过滤器的大小时,则过滤模块根据第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。可见,取第一布隆过滤器的粗粒度行键数可以有效提高相同大小的第一布隆过滤器的数量,并且使得第一布隆过滤器的大小所对应的哈希值集合被复用,从而减少了过滤文件的开销。
在一些可能的实现方式中,当所述第一表图中不存在所述第一布隆过滤器的大小时,所述布隆过滤器管理装置还包括:
所述确定模块,还用于根据所述第一行键数确定所述第一布隆过滤器的大小;根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合;
保存模块,用于保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
可见,当第一表图中不存在第一布隆过滤器的大小时,确定模块可以根据第一行键数确定出第一布隆过滤器的大小,进而确定出第一行键数中对应的每个行键所对应的哈希值,生成第一布隆过滤器的大小所对应的哈希值集合,进而保存模块保存第一行键数,第一布隆过滤器大小以及哈希值集合之间的对应关系,以便下次遇到与第一布隆过滤器相同大小的文件时过滤使用,从而减少过滤文件的计算资源。
在另一些可能的实现方式中,所述确定模块,具体用于获取所述第一布隆过滤器的实际行键数;按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;选取所述第一区间的右边界值确定为所述第一行键数。
可见,按照目标规则将第一布隆过滤器的实际行键数划分至对应的第一区间,并且取第一区间的右边界值作为第一行键数,例如:假设第一布隆过滤器的实际行键数是230,而目标规则是按照每300的行键数划分一个区间,即:1至300为第一区间,301至600为第二区间,601至900为第三区间等,则取230所在的第一区间的右边界值300作为第一行键数。
在另一些可能的实现方式中,所述确定模块,还用于在所述获取模块获取第一表图之前,确定布隆过滤器的粗粒度行键数;根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;
所述保存模块,还用于保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
在实际应用中,获取第一表图之间,则需要生成第一表图,具体生成的第一表图的过程为:确定模块先确定当前每个布隆过滤器的粗粒度行键数,根据当前每个布隆过滤器的粗粒度行键数确定布隆过滤器的大小,进而根据粗粒度行键数对应的每个行键确定对应的哈希值,所有的哈希值组成哈希值集合,从而保存模块保存布隆过滤器的粗粒度行键数,布隆过滤器的大小以及哈希值集合之间的对应关系,以便过滤文件时根据第一表图查询到相同大小的布隆过滤器时,复用哈希值集合,从而减少过滤文件时的计算资源。
在另一些可能的实现方式中,所述确定模块,具体用于获取布隆过滤器的实际行键数;按照所述目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
可见,具体确定当前每个布隆过滤器的行键数的过程为:获取布隆过滤器的实际行键数,按照目标规则将布隆过滤器的实际行键数划分至对应的区间内,并选取区间的右边界值作为布隆过滤器的粗粒度行键值,例如:当前有五个布隆过滤器,每个布隆过滤器的实际行键数分别为211,340,532,160,832。假设目标规则为每300个行键数划分为一个区间,则对应的区间分别为0至300,301至600,601至900,则上述五个实际行键数对应的粗粒度行键数分别为300,600,600,300,900。当然,在实际应用中,可根据每个布隆过滤器的实际行键数确定目标规则的精确度,例如:布隆过滤器的实际行键数之间的差距比较近,可以缩小划分区间的范围,此处不做具体限定。
在另一些可能的实现方式中,所述布隆过滤器管理装置还包括:***模块,用于在所述确定模块根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
在实际应用中,当确定每个行键对应的哈希值后,将每个哈希值***至对应的布隆过滤器上,并将每个哈希值对应的位置置为1,从而方便后续使用布隆过滤器过滤文件,例如:确定待查询的行键所对应的每个哈希值,然后再布隆过滤器对应的位置上进行判断,如果有任意一个位置的值为0,则确定该行键不在该文件中,从而不必过滤该文件,减少过滤该文件的开销。
本发明第三方方面提供一种布隆过滤器管理装置,包括:
一个或多个处理器、存储器、总线***以及收发器,所述处理器、所述存储器和所述收发器通过所述总线***相连;
其中,所述存储器中存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述布隆过滤器管理装置执行时使所述布隆过滤器管理装置执行第一方面或者第一方面任意一种可能的实现方式中所述的方法。
可见,在使用布隆过滤器过滤文件时,首先确定第一布隆过滤器(即:待过滤文件所对应的布隆过滤器)对应的第一行键数,其中,该第一行键数是第一布隆过滤器的粗粒度行键数,即:按照目标规则将第一布隆过滤器的实际行键数所在的区间取右边界值,将此右边界值作为第一布隆过滤器的第一行键数,进一步,根据第一行键数查询第一表图中是否存在第一布隆过滤器的大小,当第一表图中存在第一布隆过滤器的大小时,则根据第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。可见,取第一布隆过滤器的粗粒度行键数可以有效提高相同大小的第一布隆过滤器的数量,并且使得第一布隆过滤器的大小所对应的哈希值集合被复用,从而减少了过滤文件的开销。
附图说明
图1-a为现有技术中非关系型存储***中数据流向的一个实施例示意图;
图1-b为现有技术中键-值存储结构的一个结构示意图;
图1-c为现有技术中生成布隆过滤器的一个实施例示意图;
图2-a为本发明实施例中非关系型存储***中数据流向的一个实施例示意图;
图2-b为本发明实施例中生成布隆过滤器的一个流程示意图;
图2-c为本发明实施例中过滤文件的一个流程示意图;
图3为本发明实施例中使用布隆过滤器过滤文件的一个实施例示意图;
图4为本发明实施例中生成布隆过滤器的一个实施例示意图;
图5为本发明实施例中布隆过滤器***元素的一个实施例示意图;
图6为本发明实施例中使用布隆过滤器过滤文件的另一个实施例示意图;
图7为本发明实施例中布隆过滤器管理装置的一个结构示意图;
图8为本发明实施例中布隆过滤器管理装置的另一个结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在介绍本发明实施例之前,介绍一下本发明的技术方案所应用的***,本发明的技术方案应用于LSM-Tree的非关系型存储***,LSM-Tree是基于日志(log)的树型数据结构,数据在写入内存表之前先写入log,防止机器宕机造成数据丢失,在非关系型存储***中,没有严格的模式定义,可以根据业务特性自由伸缩内存表结构,一般会使用key-value方式进行数据存储,其中,rowkey是key-value存储中的一行数据的标示,用于数据路由以及文件索引查询。key-value这种方式结构灵活,可以随时添加字段或者修改已经存入在非关系型存储***中的数据,但是,这样导致一个rowkey所带的所有字段的数据可能分散在多个文件中,当需要查找该rowkey且事先不确定哪些文件存在该rowkey时,可能会查找非常多的文件,为了减少查询的文件数量,该非关系型存储***一般使用合并机制,即:将多个数据文件进行合并,让一个rowkey的记录尽量集中在少量的文件中,从而减少查询的文件数量。
如图2-a所示,为本发明实施例中LSM-Tree的非关系型存储***的一个结构示意图,在该LSM-Tree的非关系型存储***中,数据的读取和写入操作都由客户端发起,在数据写入流程中,当数据在内存的内存表(Memtable)中的数量超过了Memtable的门限值时,触发启动该布隆过滤器管理装置,该布隆过滤器管理装置生成布隆过滤器,然后把数据写入到文件中,并将文件存储在磁盘中,后续需要对文件过滤时,则通过布隆过滤器过滤文件,可见,布隆过滤器管理装置主要完成的功能包括布隆过滤器的生成、文件过滤以及文件在磁盘上的管理。
下面介绍一下该布隆过滤器管理装置管理的主要模块,即:布隆过滤器生成模块和布隆过滤器过滤模块。
A.布隆过滤器生成模块
该模块存在于服务器端的内存中,被布隆过滤器管理装置管理,主要完成对Memtable写文件时布隆过滤器的生成和元素(即:rowkey的哈希值)***。不同的Memtable有不同的rowkey个数,布隆过滤器生成模块首先根据事先划分好的rowkey区间,把各个Memtable的rowkey个数划归到对应的区间内,然后取实际rowkey个数所在区间的右边界值,后根据右边界值计算布隆过滤器大小并进行元素***。
在实际应用中,如图2-b所示,为生成布隆过滤器的一个流程示意图,具体过程为:101、数据更新操作,即:服务器端接收到客户端发送的数据更新请求(包括更新、***和删除、修改等)。
102、写内存操作,即:将更新请求对应的数据暂时缓存到内存的内存表(Memtable)中。
103、判断内存表中的数据量是否到达门限值,其中,内存表有预设的一个门限值。
104、当内存表中的数据量到达门限值时,启动写文件操作,即:将内存表中的数据写入文件。
105、根据内存表中实际rowkey个数确定所在区间的右边界值,即:在生成文件之前,需要生成布隆过滤器,将内存表中的rowkey个数划分区间,每个内存表中的实际rowkey个数个数有对应的区间,并选取区间的右边界值。
106、根据右边界值计算布隆过滤器的大小,从而生成空的布隆过滤器。
107、***元素到布隆过滤器,即:将rowkey所对应的哈希值***到布隆过滤器中。
B.布隆过滤器过滤模块
该模块也存在于服务器端的内存中,同样被布隆过滤器管理装置管理,主要用于使用布隆过滤器过滤文件,减少需要扫描的文件个数。布隆过滤器在生成之后一般以文件的形式存在于磁盘上,在使用时,加载到内存中。
在实际应用中,如图2-c所示,布隆过滤器过滤文件的具体过程为:
201、数据查询操作,即:接收到数据查询请求,并获取到待过滤的数据文件。
202、根据文件中的rowkey个数获取rowkey所在区间的右边界值。
203、根据右边界值查询图表(map),其中,map中保存复用的哈希(hash)值,该map的结果为:map<BloomfilterSize,list<hash-code>>,其中BloomfilterSize是粗粒度布隆过滤器的大小(即:根据右边界值计算出的布隆过滤器的大小),list<hash_code>是该粗粒度布隆过滤器大小对应的可复用的hash值集合。
204、判断该rowkey是否存在复用的hash值,即:通过查询map判断该rowkey是否存在复用的hash值。
205、若该rowkey存在复用的hash值,则直接读取hash值,并过滤该待过滤的文件。
206、若该rowkey不存在复用的hash值,则根据该rowkey计算hash值,并存入至map中,即:当该rowkey不存在复用的hash值时,则说明该文件的hash值没有被计算过,将根据该rowkey计算出的hash值存入至map中,以便后续查询map时使用。
请参阅图3,为本发明实施例中使用布隆过滤器过滤文件的方法的一个实施例示意图,该实施例的具体流程如下:
步骤301、确定第一表图。
在实际应用中,确定第一表图的具体过程包括:确定布隆过滤器的粗粒度行键数;根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
其中,确定布隆过滤器的粗粒度行键数包括:获取布隆过滤器的实际行键数;按照所述目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
其中,所述根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
在实际应用中,如图4所示,假设实际行键数(rowkey number)按照每300个划分一个区间范围(range),如果有5个内存表(Memtable),对应的rowkey个数分别为:234,404,453,189,708,那么这5个Memtable对应的右边界值分别为:300,600,600,300,900,则生成的空布隆过滤器分别:BF300,BF600,BF600,BF300,BF900。
进一步,根据右边界值生成的空布隆过滤器进行rowkey对应的hash值的***,具体过程如图5所示,内存表(MemTable)在进行数据写文件之前,会生成一个空的布隆过滤器,即内存中一块全都是0的内存块,内存表中的每一行记录的rowkey首先通过k个不同的hash函数计算,生成k个不同的hash值(一个正整数),然后在空的布隆过滤器上把hash值指定的位置置为1。
步骤302、确定第一布隆过滤器对应的第一行键数。
其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数。
在实际应用中,确定第一布隆过滤器对应的第一行键数的具体过程为:获取所述第一布隆过滤器的实际行键数;按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;选取所述第一区间的右边界值确定为所述第一行键数。
步骤303、获取第一表图。
其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;
步骤304、根据所述第一行键数查询所述第一表图中是否存在所述第一布隆过滤器的大小,若是,则执行步骤305;若否,则执行步骤306至步骤308。
步骤305、根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
如图6所示,在实际应用中,首先对查询的rowkey进行同样的k次hash计算,得到k个hash值,然后在布隆过滤器中hash值对应的位置进行判断,如果有任意一个位置的值为0,则说明该rowkey肯定不存在于这个文件中,这样就可以跳过这个文件的查询。如果所有的hash值指定位置都为1,但是这些hash值指定的位置可能被其他rowkey置为1的,所以该rowkey可能存在于该文件中,需要进行索引查询或者文件扫描来进行rowkey值的查询。所以,布隆过滤器存在一定的误判概率。
布隆过滤器有的误判率可以通过下面公式计算得到:
f=(1-e-kn/m)k
f表示误判率,k表示hash函数的个数,n表示待***布隆过滤器的rowkey个数,m表示布隆过滤器的大小。其中,误判率f是一个可配置项,当误判率f配置完成之后,可以反推出布隆过滤器的大小m:
m=n*log2e*log2(1/fexp)
≈n*1.44*log2(1/fexp)
另外,hash函数的计算,一般可以使用如下的公式表达:
h=fhash(m,c)
在进行hash值计算时,可以通过不同的c值(预设的一个常数)来得到k个hash值,如果m和c固定不变时,将会得到相同的hash值。
在数据查询阶段,随着不断进行rowkey查询,会生成一些复用的hash值,并存储在map中,假设现在有如下所示的map结构:
可见,对于user001的查询,已经生成了一个含有3个复用hash值的map结构,在过滤后续文件的过程中,如果遇到了右边界值是300,600或者900的文件,则可直接使用对应的复用hash值进行文件过滤,而不再需要重新计算hash值,从而减少计算的开销。
步骤306、根据所述第一行键数确定所述第一布隆过滤器的大小。
步骤307、根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合。
步骤308、保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
可见,当第一表图中不存在第一布隆过滤器的大小时,可以根据第一行键数确定出第一布隆过滤器的大小,进而确定出第一行键数中对应的每个行键所对应的哈希值,生成第一布隆过滤器的大小所对应的哈希值集合,保存第一行键数,第一布隆过滤器大小以及哈希值集合之间的对应关系,以便下次遇到与第一布隆过滤器相同大小的文件时过滤使用,从而减少过滤文件的计算资源。
为便于更好的实施本发明实施例的上述相关方法,下面还提供用于配合上述方法的相关装置。
请参阅图7,本发明实施例中布隆过滤器管理装置700的一个结构示意图,所述布隆过滤器管理装置700应用于非关系型存储***,所述布隆过滤器管理装置700包括:
确定模块701,用于确定第一布隆过滤器对应的第一行键数,其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数;
获取模块702,用于获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;
查询模块703,用于根据所述确定模块701确定的所述第一行键数查询所述获取模块获取的所述第一表图中是否存在所述第一布隆过滤器的大小;
过滤模块704,用于当所述查询模块703查询到所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
在一些可能的实现方式中,所述布隆过滤器管理装置700还包括:
所述确定模块701,还用于当所述第一表图中不存在所述第一布隆过滤器的大小时,根据所述第一行键数确定所述第一布隆过滤器的大小;根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合;
保存模块705,用于保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
在另一些可能的实现方式中,所述确定模块701,具体用于获取所述第一布隆过滤器的实际行键数;按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;选取所述第一区间的右边界值确定为所述第一行键数。
在另一些可能的实现方式中,所述确定模块701,还用于在所述获取模块获取第一表图之前,确定布隆过滤器的粗粒度行键数;根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;
所述保存模块705,还用于保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
在另一些可能的实现方式中,所述确定模块701,具体用于获取布隆过滤器的实际行键数;按照所述目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
在另一些可能的实现方式中,所述布隆过滤器管理装置700还包括:***模块706,用于在所述确定模块根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
可见,确定模块首先确定第一布隆过滤器(即:待过滤文件所对应的布隆过滤器)对应的第一行键数,其中,该第一行键数是第一布隆过滤器的粗粒度行键数,即:按照目标规则将第一布隆过滤器的实际行键数所在的区间取右边界值,将此右边界值作为第一布隆过滤器的第一行键数,进一步,查询模块根据第一行键数查询第一表图中是否存在第一布隆过滤器的大小,当第一表图中存在第一布隆过滤器的大小时,则过滤模块根据第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。可见,取第一布隆过滤器的粗粒度行键数可以有效提高相同大小的第一布隆过滤器的数量,并且使得第一布隆过滤器的大小所对应的哈希值集合被复用,从而减少了过滤文件的开销。
图7所示的实施例从功能模块的角度对布隆过滤器管理装置的具体结构进行了说明,以下结合图8的实施例从硬件角度对布隆过滤器管理装置的具体结构进行说明:
本发明还提供一种布隆过滤器管理装置800,包括:
一个或多个处理器801、存储器802、总线***803以及收发器804,所述处理器801、所述存储器802和所述收发器804通过所述总线***803相连;
其中,所述存储器802中存储一个或多个程序805,所述一个或多个程序805包括指令,所述指令当被所述布隆过滤器管理装置800执行时使所述布隆过滤器管理装置800执行如图3所示的方法。
需要说明的是,该处理器801可以是CPU,该处理器701还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器,或者该处理器也可以是任何常规的处理器等。在实现过程中,指令可以通过处理器801中的硬件的集成逻辑电路或者软件形式的指令完成,可以是直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器802,处理器801读取存储器802中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的便携式电子设备,计算机可读存储介质和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例提供的技术方案。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本发明进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。
Claims (13)
1.一种使用布隆过滤器过滤文件的方法,其特征在于,所述方法应用于非关系型存储***,所述方法包括:
确定第一布隆过滤器对应的第一行键数,其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数;
获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;
根据所述第一行键数查询所述第一表图中是否存在所述第一布隆过滤器的大小;
当所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
2.根据权利要求1所述的方法,其特征在于,当所述第一表图中不存在所述第一布隆过滤器的大小时,所述方法还包括:
根据所述第一行键数确定所述第一布隆过滤器的大小;
根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合;
保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
3.根据权利要求1或2所述的方法,其特征在于,所述确定第一布隆过滤器对应的第一行键数包括:
获取所述第一布隆过滤器的实际行键数;
按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;
选取所述第一区间的右边界值确定为所述第一行键数。
4.根据权利要求1或2所述的方法,其特征在于,所述获取第一表图之前,所述方法还包括:
确定布隆过滤器的粗粒度行键数;
根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;
根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;
保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
5.根据权利要求4所述的方法,其特征在于,所述确定布隆过滤器的粗粒度行键数包括:
获取布隆过滤器的实际行键数;
按照目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;
选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
6.根据权利要求4所述的方法,其特征在于,所述根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,所述方法还包括:
将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
7.一种布隆过滤器管理装置,其特征在于,所述布隆过滤器管理装置应用于非关系型存储***,所述布隆过滤器管理装置包括:
确定模块,用于确定第一布隆过滤器对应的第一行键数,其中,所述第一布隆过滤器为待过滤文件所对应的布隆过滤器,所述第一行键数为所述第一布隆过滤器的粗粒度行键数;
获取模块,用于获取第一表图,其中,所述第一表图中包括粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系;
查询模块,用于根据所述确定模块确定的所述第一行键数查询所述获取模块获取的所述第一表图中是否存在所述第一布隆过滤器的大小;
过滤模块,用于当所述查询模块查询到所述第一表图中存在所述第一布隆过滤器的大小时,根据所述第一布隆过滤器的大小所对应的哈希值集合进行文件过滤。
8.根据权利要求7所述的布隆过滤器管理装置,其特征在于,当所述第一表图中不存在所述第一布隆过滤器的大小时,所述布隆过滤器管理装置还包括:
所述确定模块,还用于根据所述第一行键数确定所述第一布隆过滤器的大小;根据所述第一行键数所对应的每个行键确定所述第一布隆过滤器的大小所对应的哈希值集合;
保存模块,用于保存所述第一行键数与所述第一行键数所对应的所述第一布隆过滤器的大小之间的对应关系,以及所述第一布隆过滤器的大小与所述第一布隆过滤器的大小所对应的哈希值集合之间的对应关系。
9.根据权利要求7或8所述的布隆过滤器管理装置,其特征在于,所述确定模块,具体用于获取所述第一布隆过滤器的实际行键数;按照目标规则将所述第一布隆过滤器的实际行键数划分至对应的第一区间;选取所述第一区间的右边界值确定为所述第一行键数。
10.根据权利要求8所述的布隆过滤器管理装置,其特征在于,所述确定模块,还用于在所述获取模块获取第一表图之前,确定布隆过滤器的粗粒度行键数;根据布隆过滤器的粗粒度行键数确定布隆过滤器的大小;根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合;
所述保存模块,还用于保存粗粒度行键数与粗粒度行键数所对应的布隆过滤器的大小之间的对应关系,以及布隆过滤器的大小与布隆过滤器的大小所对应的哈希值集合之间的对应关系。
11.根据权利要求10所述的布隆过滤器管理装置,其特征在于,所述确定模块,具体用于获取布隆过滤器的实际行键数;按照目标规则将所述布隆过滤器的实际行键数划分至对应的区间内;选取区间的右边界值确定为所述布隆过滤器的粗粒度行键数。
12.根据权利要求10所述的布隆过滤器管理装置,其特征在于,所述布隆过滤器管理装置还包括:***模块,用于在所述确定模块根据粗粒度行键数所对应的每个行键确定布隆过滤器的大小所对应的哈希值集合之后,将所述哈希值集合中的每个哈希值***至对应的布隆过滤器上,并将所述每个哈希值对应的位置置为1。
13.一种布隆过滤器管理装置,其特征在于,包括:
一个或多个处理器、存储器、总线***以及收发器,所述处理器、所述存储器和所述收发器通过所述总线***相连;
其中,所述存储器中存储一个或多个程序,所述一个或多个程序包括指令,所述指令当被所述布隆过滤器管理装置执行时使所述布隆过滤器管理装置执行如权利要求1至6任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/080140 WO2017185210A1 (zh) | 2016-04-25 | 2016-04-25 | 一种使用布隆过滤器过滤文件的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108140050A CN108140050A (zh) | 2018-06-08 |
CN108140050B true CN108140050B (zh) | 2020-08-25 |
Family
ID=60160604
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680059828.1A Active CN108140050B (zh) | 2016-04-25 | 2016-04-25 | 一种使用布隆过滤器过滤文件的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108140050B (zh) |
WO (1) | WO2017185210A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159436B (zh) * | 2018-11-07 | 2023-12-12 | 腾讯科技(深圳)有限公司 | 一种推荐多媒体内容的方法、装置及计算设备 |
CN110515897B (zh) * | 2019-07-17 | 2021-11-23 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | Lsm存储***读性能的优化方法及*** |
US10877967B1 (en) * | 2020-03-13 | 2020-12-29 | Snowflake Inc. | System and method for disjunctive joins |
CN111475492B (zh) * | 2020-05-14 | 2023-06-16 | 支付宝(中国)网络技术有限公司 | 数据处理方法以及装置 |
CN113051568A (zh) * | 2021-03-29 | 2021-06-29 | 深信服科技股份有限公司 | 一种病毒检测方法、装置、电子设备及存储介质 |
CN113904999B (zh) * | 2021-10-29 | 2023-08-08 | 北京知道创宇信息技术股份有限公司 | 一种数据扩容方法及可编程交换机 |
CN115225697B (zh) * | 2022-06-16 | 2024-04-09 | 阿里云计算有限公司 | 状态同步方法、装置、设备及存储介质 |
CN115454983B (zh) * | 2022-09-13 | 2023-07-14 | 浪潮卓数大数据产业发展有限公司 | 一种基于布隆过滤器的海量Hbase数据去重方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916171A (zh) * | 2010-07-16 | 2010-12-15 | 中国科学院计算技术研究所 | 一种并发层次式的重复数据消除方法和*** |
CN105426466A (zh) * | 2015-11-16 | 2016-03-23 | 天津南大通用数据技术股份有限公司 | 提高列存数据库精确查询速度的方法与装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8826438B2 (en) * | 2010-01-19 | 2014-09-02 | Damballa, Inc. | Method and system for network-based detecting of malware from behavioral clustering |
US8626781B2 (en) * | 2010-12-29 | 2014-01-07 | Microsoft Corporation | Priority hash index |
US8768927B2 (en) * | 2011-12-22 | 2014-07-01 | Sap Ag | Hybrid database table stored as both row and column store |
CN105354323A (zh) * | 2015-11-16 | 2016-02-24 | 天津南大通用数据技术股份有限公司 | 使用二级过滤提高列存数据库精确查询速度的方法与装置 |
-
2016
- 2016-04-25 CN CN201680059828.1A patent/CN108140050B/zh active Active
- 2016-04-25 WO PCT/CN2016/080140 patent/WO2017185210A1/zh active Application Filing
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101916171A (zh) * | 2010-07-16 | 2010-12-15 | 中国科学院计算技术研究所 | 一种并发层次式的重复数据消除方法和*** |
CN105426466A (zh) * | 2015-11-16 | 2016-03-23 | 天津南大通用数据技术股份有限公司 | 提高列存数据库精确查询速度的方法与装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2017185210A1 (zh) | 2017-11-02 |
CN108140050A (zh) | 2018-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108140050B (zh) | 一种使用布隆过滤器过滤文件的方法及装置 | |
CN110149803B (zh) | 数据存储方法、***及终端设备 | |
CN106649346B (zh) | 数据重复性校验方法及装置 | |
KR20160040282A (ko) | 데이터를 저장하기 위한 방법 및 장치 | |
CN111475105B (zh) | 监控数据存储方法、设备、服务器及存储介质 | |
CN108228799B (zh) | 对象索引信息的存储方法及装置 | |
US20160179836A1 (en) | Method for updating data table of keyvalue database and apparatus for updating table data | |
CN110727702B (zh) | 数据查询方法、装置、终端和计算机可读存储介质 | |
CN105373541A (zh) | 数据库的数据操作请求的处理方法和*** | |
CN109086456B (zh) | 数据索引方法及装置 | |
CN112328842B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN110232095B (zh) | 一种数据同步方法、装置、存储介质和服务器 | |
CN108427736B (zh) | 一种用于查询数据的方法 | |
CN110716965A (zh) | 一种块链式账本中的查询方法、装置及设备 | |
US11042516B2 (en) | Flexible schema table | |
CN111046106A (zh) | 缓存数据同步方法、装置、设备及介质 | |
CN106933907B (zh) | 数据表扩展指标的处理方法及装置 | |
CN111291083A (zh) | 网页源码数据处理方法、装置及计算机设备 | |
CN114840487A (zh) | 分布式文件***的元数据管理方法和装置 | |
CN113961573A (zh) | 一种时序数据库查询方法和查询*** | |
CN108268523B (zh) | 数据库聚合处理方法及装置 | |
CN108376054B (zh) | 一种对标识数据进行索引的处理方法及装置 | |
CN112527824B (zh) | 分页查询方法、装置、电子设备和计算机可读存储介质 | |
CN109063215B (zh) | 数据检索方法及装置 | |
CN106446080B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |