CN113760876A - 一种数据过滤方法和装置 - Google Patents
一种数据过滤方法和装置 Download PDFInfo
- Publication number
- CN113760876A CN113760876A CN202110171688.XA CN202110171688A CN113760876A CN 113760876 A CN113760876 A CN 113760876A CN 202110171688 A CN202110171688 A CN 202110171688A CN 113760876 A CN113760876 A CN 113760876A
- Authority
- CN
- China
- Prior art keywords
- unique identifier
- array
- stored
- identifier
- data
- 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
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
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- 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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
- G06F16/2343—Locking methods, e.g. distributed locking or locking implementation details
-
- 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/2455—Query execution
- G06F16/24553—Query execution of query operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了数据过滤方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括接收数据存储请求,获取所述请求中待存储对象的唯一标识;调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。从而,本发明的实施方式能够解决现有数据过滤效率低、误判率高的问题。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据过滤方法和装置。
背景技术
布谷鸟过滤器是一种为了节省巨量数据存储空间,对大数据进行去重过滤的功能。其中,布谷鸟过滤器源于布谷鸟哈希算法,基本结构为一个数组,两个哈希算法,以及一个计算指纹的哈希算法。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
目前,布谷鸟过滤器需要根据插入对象通过指纹哈希算法计算出对象的指纹信息,而指纹只有一个字节,256种可能,同一个位置出现相同指纹的可能性很大,从而会导致查询、删除出现误判。还有,插入多个同一个元素会导致出现挤兑循环。另外,在踢出过程中同时进行查询,有可能无法查询到刚刚被踢出还没找到新位置的指纹,导致误判。
发明内容
有鉴于此,本发明实施例提供一种数据过滤方法和装置,能够解决现有数据过滤效率低、误判率高的问题。
为实现上述目的,根据本发明实施例的一个方面,提供了一种数据过滤方法,包括接收数据存储请求,获取所述请求中待存储对象的唯一标识;调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
可选地,调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标之后,包括:
判断所述第二数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第二数组中,所述请求处理完成;
若否则获取所述第二数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则踢出第二数组数据中的唯一标识,以将所述待存储对象的唯一标识存入所述第二数组中。
可选地,踢出第二数组数据中的唯一标识,包括:
获取查询锁定标识,判断所述查询锁定标识是否为被锁定,若是则踢出第二数组数据中的唯一标识放入队列中等待重新进行存储;若否则踢出第二数组数据中的唯一标识重新进行存储。
可选地,所述踢出第二数组数据中的唯一标识之后,包括:
获取踢出状态标识并自增;
待所述踢出的唯一标识重新存储完成后,获取踢出状态标识并自减。
可选地,还包括:
接收数据查询请求,获取所述请求中待查询对象的唯一标识;
调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空;
若是则将预设的空标识进行标记,调用第二哈希函数循环执行前述过程得到所述的空标识被二次标记则返回结果为未查询到;
若否则获取所述第一数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则返回结果为已查询到;如果否则调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致,则返回结果为未查询到。
可选地,调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致之后,包括:
获取查询锁定标识,判断所述查询锁定标识是否为未锁定;
若是则判断踢出状态标识是否为0,如果是则返回结果为未查询到;如果否则变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;若否则返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;
若否则循环调用第一哈希函数以及第二哈希函数进行查询,直至得到返回结果为已查询到或查询锁定标识为未锁定且返回结果为未查询到为止。
可选地,还包括:
通过线程执行接收的请求,如果执行唯一标识重新进行存储则增加所述线程预设的重新存储次数;
监控所述线程的重新存储次数,如果所述重新存储次数大于预设的次数阈值,则扩容第一数组和第二数组的存储空间。
另外,本发明还提供了一种数据过滤装置,包括接收模块,用于接收数据存储请求,获取所述请求中待存储对象的唯一标识;处理模块,用于调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
上述发明中的一个实施例具有如下优点或有益效果:本发明为了能够不出现误判及循环挤兑问题,不再使用指纹方式进行记录,而是直接能够通过配置的对象唯一标识进行记录。还有,在执行查询、新增以及删除等等操作时增加上锁机制,保证查询的绝对准确,并对于锁定查询效率进行了优化,仅对踢出数据进行锁定,不会影响其它流程的正常进行。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明第一实施例的数据过滤方法的主要流程的示意图;
图2是根据本发明第二实施例的数据过滤方法的主要流程的示意图;
图3是根据本发明第三实施例的数据过滤方法的主要流程的示意图;
图4是根据本发明实施例的数据过滤装置的主要模块的示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图;
图6是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明第一实施例的数据过滤方法的主要流程的示意图,如图1所示,所述数据过滤方法包括:
步骤S101,接收数据存储请求,获取所述请求中待存储对象的唯一标识。
在实施例中,接收数据存储请求,解析所述请求,可以获得所述请求中携带的待存储对象的唯一标识。其中,所述唯一标识为根据预设的配置信息生成的。例如:配置信息为用户ID+事件编码。
也就是说,调用方直接根据预设的配置信息生成待存储对象的唯一标识,并将该唯一标识放入数据存储请求中。被调用方接收数据存储请求之后,则可以直接获取待存储对象的唯一标识(唯一标识相同则视为待存储对象相同)进行存储并去重处理,不需要进行任何的处理,大大节省了处理时间。
较佳的,配置信息可以设置为由用户指定唯一String类型的参数。
步骤S102,调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
在实施例中,第一哈希函数和第二哈希函数只要不一样即可,第一哈希函数对应第一数组,第二哈希函数对应第二数组。当然也可以设置一个哈希函数一个数组执行数据过滤的处理过程,其处理过程与本发明各个实施例相同只是不做二次数组的判断。
需要说明的是,接收两次数据存储请求,可能出现同一个唯一标识,这种情况极为少见,但如果遇到可能在数组的两个位置存储了同一个唯一标识,若不被踢出则视为冗余数据存在即可(冗余数据有利于提高查询效率)。若被踢出则被踢出的唯一标识必然会使用另一个哈希函数继续寻找落脚点,这时必定会找到另一个相同的唯一标识,重复的唯一标识视为已找到位置结束处理即可,彻底完成了去重操作。
在一些实施例中,调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标之后,可以判断所述第二数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第二数组中,所述请求处理完成。若否则获取所述第二数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则踢出第二数组数据中的唯一标识,以将所述待存储对象的唯一标识存入所述第二数组中。
可以看出,在进行另外一个哈希函数的计算之后,如果没有相同的唯一标识或者没有数组位置能够存入,则将旧的唯一标识进行踢出,重新执行存储。
进一步地实施例,踢出第二数组数据中的唯一标识,还可以包括获取查询锁定标识,判断所述查询锁定标识是否为被锁定,若是则踢出第二数组数据中的唯一标识放入队列中等待重新进行存储;若否则踢出第二数组数据中的唯一标识重新进行存储。
可以看出,本发明设置了查询锁定标识,如果查询锁定标识为被锁定,则视为数据正在被锁定查询中,也就是说接收了数据查询请求正在进行数据查询处理。为了保证查询的更为精确,保证踢出的唯一标识也能够被查询到,则将踢出第二数组数据中的唯一标识放入队列中等待重新进行存储,这样便可以遍历队列进行查询唯一标识。同时,也实现了数据存储和数据查询的并行处理。
值得说明的是,通过线程执行接收的请求,对线程预先配置有重新存储次数,也就是说线程执行请求的过程中只要有踢出唯一标识进行重新存储则需要将重新存储次数自增。而且,本发明监控所述线程的重新存储次数,如果所述重新存储次数大于预设的次数阈值,则扩容第一数组和第二数组的存储空间。
更进一步地实施例,所述踢出第二数组数据中的唯一标识之后,可以获取踢出状态标识并自增,待踢出的唯一标识重新存储完成后,获取踢出状态标识并自减。可以看出,本发明设置了全局变量的踢出状态标识,当数组中有唯一标识被踢出则将踢出状态标识加1,待踢出的唯一标识重新存储完成则将剔出状态标识减1。
作为另一些实施例,在进行数据过滤的过程中还可以接收到数据查询请求,那么处理的过程包括:获取所述请求中待查询对象的唯一标识。调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空。若是则将预设的空标识进行标记,调用第二哈希函数循环执行前述过程得到所述的空标识被二次标记则返回结果为未查询到。
若否则获取所述第一数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则返回结果为已查询到;如果否则调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致,则返回结果为未查询到。
可以看出,在第一哈希函数无法得到返回结果的时候,可以调用第二哈希函数(当然如果没有配置第二哈希函数即另外哈希函数,则可以直接返回结果为未查询到)进行数据的查询。
进一步地实施例,调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致之后,可以获取查询锁定标识,判断所述查询锁定标识是否为未锁定。
若是则判断踢出状态标识是否为0,如果是则返回结果为未查询到;如果否则变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;若否则返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识。
若否则循环调用第一哈希函数以及第二哈希函数进行查询,直至得到返回结果为已查询到或查询锁定标识为未锁定且返回结果为未查询到为止。
可以看出,在该数据查询的实施例中若两个哈希函数均无法查找的唯一标识,则需要查看三个标识位:空标识、查询锁定标识和踢出状态标识,分几种情况:
空标识被两次标记,则视为不存在,返回结果为未查询到。
空标识没有被两次标记,如果查询锁定标识为被锁定,则循环调用第一哈希函数以及第二哈希函数进行查询,直至得到返回结果为已查询到或查询锁定标识为未锁定且返回结果为未查询到为止。
空标识没有被两次标记,如果查询锁定标识为未锁定,踢出状态标识不为0,则变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;若否则返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识。
空标识没有被两次标记,如果查询锁定标识为未锁定,踢出状态标识为0,则视为不存在,返回结果为未查询到。
优选地,可以通过线程进行请求的处理。
需要说明的是,在从数组中踢出唯一标识时自增当前踢出状态标识,而将踢出的唯一标识存入队列中则自减当前踢出状态标识,待将踢出的唯一标识从队列中取出进行重新存储时则自增当前踢出状态标识,即还原踢出状态标识。
另外值得说明的是,如果接收到数据删除的请求,则可以复用数据查询请求的处理过程,只不过在返回结果为已查询到的同时,将查询到的唯一标识移除数组或者踢出至预设队列中。
图2是根据本发明第二实施例的数据存储的主要流程的示意图,所述数据过滤方法可以包括:
步骤S201,接收数据存储请求,获取所述请求中待存储对象的唯一标识。
步骤S202,调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标。
步骤S203,判断所述第一数组下标对应的数组数据是否为空,若是则进行步骤S204,若否则进行步骤S205。
步骤S204,将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成。
步骤S205,获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则进行步骤S206,如果否则进行步骤S207。
步骤S206,不存入待存储对象的唯一标识,所述请求处理完成。
步骤S207,调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标。
步骤S208,判断所述第二数组下标对应的数组数据是否为空,若是则进行步骤S209,若否则进行步骤S210。
步骤S209,将待存储对象的唯一标识存入对应的第二数组中,所述请求处理完成。
步骤S210,获取所述第二数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则进行步骤S211,如果否则进行步骤S212。
步骤S211,不存入待存储对象的唯一标识,所述请求处理完成。
步骤S212,获取查询锁定标识,判断所述查询锁定标识是否为被锁定,若是则进行步骤S213,若否则进行步骤S214。
步骤S213,踢出第二数组数据中的唯一标识放入队列中并记录重新存储次数,返回步骤S202。
步骤S214,直接踢出第二数组数据中的唯一标识并记录重新存储次数,返回步骤S202。
在实施例中,步骤S214踢出第二数组数据中的唯一标识之后,可以获取踢出状态标识并自增,之后,待踢出的唯一标识重新存储完成后,获取踢出状态标识并自减。而步骤S213踢出第二数组数据中的唯一标识时获取当前踢出状态标识并自增,将该唯一标识放入队列中时则获取当前踢出状态标识并自减,待所述队列中所有踢出的唯一标识出队,还原踢出状态标识。
值得说明的是,本发明通过线程执行接收的请求,对线程预先配置有重新存储次数,也就是说线程执行请求的过程中只要有踢出唯一标识进行重新存储则需要将重新存储次数自增。而且,本发明监控所述线程的重新存储次数,如果所述重新存储次数大于预设的次数阈值,则扩容第一数组和第二数组的存储空间。从而,实现了对数组存储空间的动态扩容,且节省了资源,最高效的资源利用。
较佳的,如果踢出唯一标识需要存入队列则自增重新存储次数,然后踢出唯一标识从队列中出队进行重新存储则再次自增重新存储次数,例如:踢出唯一标识存入队列自增重新存储次数至5,那么踢出唯一标识从队列中出队进行重新存储则再次自增重新存储次数后为10。
图3是根据本发明第三实施例的数据查询的主要流程的示意图,所述数据过滤方法可以包括:
步骤S301,接收数据查询请求,获取所述请求中待查询对象的唯一标识。
步骤S302,调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标。
步骤S303,判断所述第一数组下标对应的数组数据是否为空,若是则进行步骤S304,若否则进行步骤S305。
步骤S304,将预设的空标识进行标记,进行步骤S307。
步骤S305,获取所述第一数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则进行步骤S306,如果否则进行步骤S307。
步骤S306,返回结果为已查询到。
步骤S307,调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标。
步骤S308,判断所述第二数组下标对应的数组数据是否为空,若是则进行步骤S309,若否则进行步骤S310。
步骤S309,所述的空标识被二次标记,返回结果为未查询到。
步骤S310,获取所述第二数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则进行步骤S311,如果否则进行步骤S312。
步骤S311,返回结果为已查询到。
步骤S312,获取查询锁定标识,判断所述查询锁定标识是否为未锁定,若是则进行步骤S313,若否则返回步骤S302。
步骤S313,判断踢出状态标识是否为0,如果是则进行步骤S314,如果否则进行步骤S315。
步骤S314,返回结果为未查询到。
步骤S315,变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则进行步骤S316,若否则进行步骤S317。
步骤S316,返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识。
步骤S317,返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识。
图4是根据本发明实施例的数据过滤装置的主要模块的示意图,如图4所示,所述数据过滤装置400包括接收模块401接收数据存储请求,获取所述请求中待存储对象的唯一标识;处理模块402调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
在一些实施例中,处理模块402调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标之后,包括:
判断所述第二数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第二数组中,所述请求处理完成;
若否则获取所述第二数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则踢出第二数组数据中的唯一标识,以将所述待存储对象的唯一标识存入所述第二数组中。
在一些实施例中,处理模块402踢出第二数组数据中的唯一标识,包括:
获取查询锁定标识,判断所述查询锁定标识是否为被锁定,若是则踢出第二数组数据中的唯一标识放入队列中等待重新进行存储;若否则踢出第二数组数据中的唯一标识重新进行存储。
在一些实施例中,处理模块402所述踢出第二数组数据中的唯一标识之后,包括:
获取踢出状态标识并自增;
待踢出的唯一标识重新存储完成后,获取踢出状态标识并自减。
在一些实施例中,接收模块401接收数据查询请求,获取所述请求中待查询对象的唯一标识;
处理模块402调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空;若是则将预设的空标识进行标记,调用第二哈希函数循环执行前述过程得到所述的空标识被二次标记则返回结果为未查询到;若否则获取所述第一数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则返回结果为已查询到;如果否则调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致,则返回结果为未查询到。
在一些实施例中,处理模块402调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致之后,包括:
获取查询锁定标识,判断所述查询锁定标识是否为未锁定;
若是则判断踢出状态标识是否为0,如果是则返回结果为未查询到;如果否则变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;若否则返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;
若否则循环调用第一哈希函数以及第二哈希函数进行查询,直至得到返回结果为已查询到或查询锁定标识为未锁定且返回结果为未查询到为止。
在一些实施例中,接收模块401还用于:通过线程执行接收的请求;处理模块402,还用于:如果执行唯一标识重新进行存储则增加所述线程预设的重新存储次数;监控所述线程的重新存储次数,如果所述重新存储次数大于预设的次数阈值,则扩容第一数组和第二数组的存储空间。
需要说明的是,在本发明所述数据过滤方法和所述数据过滤装置在具体实施内容上具有相应关系,故重复内容不再说明。
图5示出了可以应用本发明实施例的数据过滤方法或数据过滤装置的示例性系统架构500。
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用。
终端设备501、502、503可以是具有数据过滤屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的数据过滤方法一般由服务器505执行,相应地,计算装置一般设置于服务器505中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM603中,还存储有计算机系统600操作所需的各种程序和数据。CPU601、ROM602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分605;包括诸如阴极射线管(CRT)、液晶数据过滤器(LCD)等以及扬声器等的输出部分606;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括接收模块和处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括接收数据存储请求,获取所述请求中待存储对象的唯一标识;调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
根据本发明实施例的技术方案,能够解决现有数据过滤效率低、误判率高的问题。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种数据过滤方法,其特征在于,包括:
接收数据存储请求,获取所述请求中待存储对象的唯一标识;
调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;
若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
2.根据权利要求1所述的方法,其特征在于,调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标之后,包括:
判断所述第二数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第二数组中,所述请求处理完成;
若否则获取所述第二数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则踢出第二数组数据中的唯一标识,以将所述待存储对象的唯一标识存入所述第二数组中。
3.根据权利要求2所述的方法,其特征在于,踢出第二数组数据中的唯一标识,包括:
获取查询锁定标识,判断所述查询锁定标识是否为被锁定,若是则踢出第二数组数据中的唯一标识放入队列中等待重新进行存储;若否则踢出第二数组数据中的唯一标识重新进行存储。
4.根据权利要求3所述的方法,其特征在于,所述踢出第二数组数据中的唯一标识之后,包括:
获取踢出状态标识并自增;
待踢出的唯一标识重新存储完成后,获取踢出状态标识并自减。
5.根据权利要求1所述的方法,其特征在于,还包括:
接收数据查询请求,获取所述请求中待查询对象的唯一标识;
调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空;
若是则将预设的空标识进行标记,调用第二哈希函数循环执行前述过程得到所述的空标识被二次标记则返回结果为未查询到;
若否则获取所述第一数组数据中的唯一标识,判断与待查询对象的唯一标识是否相同,如果是则返回结果为已查询到;如果否则调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致,则返回结果为未查询到。
6.根据权利要求5所述的方法,其特征在于,调用第二哈希函数循环执行前述过程仍然得到与待查询对象的唯一标识不一致之后,包括:
获取查询锁定标识,判断所述查询锁定标识是否为未锁定;
若是则判断踢出状态标识是否为0,如果是则返回结果为未查询到;如果否则变更查询锁定标识为被锁定,以及踢出状态标识设置为0,遍历队列查找踢出的唯一标识中是否存在待查询对象的唯一标识,若是则返回结果为已查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;若否则返回结果为未查询到,待所述队列中所有踢出的唯一标识出队,变更查询锁定标识为未锁定,还原踢出状态标识;
若否则循环调用第一哈希函数以及第二哈希函数进行查询,直至得到返回结果为已查询到或查询锁定标识为未锁定且返回结果为未查询到为止。
7.根据权利要求2-6任一所述的方法,其特征在于,还包括:
通过线程执行接收的请求,如果执行唯一标识重新进行存储则增加所述线程预设的重新存储次数;
监控所述线程的重新存储次数,如果所述重新存储次数大于预设的次数阈值,则扩容第一数组和第二数组的存储空间。
8.一种数据过滤装置,其特征在于,包括:
接收模块,用于接收数据存储请求,获取所述请求中待存储对象的唯一标识;
处理模块,用于调用第一哈希函数,根据待存储对象的唯一标识计算得到第一数组下标,进而判断所述第一数组下标对应的数组数据是否为空,若是则将待存储对象的唯一标识存入对应的第一数组中,所述请求处理完成;若否则获取所述第一数组数据中的唯一标识,判断与待存储对象的唯一标识是否相同,如果是则所述请求处理完成;如果否则调用第二哈希函数,根据待存储对象的唯一标识计算得到第二数组下标以将待存储对象的唯一标识存入对应的第二数组中。
9.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110171688.XA CN113760876A (zh) | 2021-02-08 | 2021-02-08 | 一种数据过滤方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110171688.XA CN113760876A (zh) | 2021-02-08 | 2021-02-08 | 一种数据过滤方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113760876A true CN113760876A (zh) | 2021-12-07 |
Family
ID=78786581
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110171688.XA Pending CN113760876A (zh) | 2021-02-08 | 2021-02-08 | 一种数据过滤方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113760876A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115935961A (zh) * | 2022-10-27 | 2023-04-07 | 安芯网盾(北京)科技有限公司 | 一种多模匹配实现多级与的高性能算法及装置 |
-
2021
- 2021-02-08 CN CN202110171688.XA patent/CN113760876A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115935961A (zh) * | 2022-10-27 | 2023-04-07 | 安芯网盾(北京)科技有限公司 | 一种多模匹配实现多级与的高性能算法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110347651B (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN109508326B (zh) | 用于处理数据的方法、装置和系统 | |
CN110543448A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN112099725A (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN110909022A (zh) | 一种数据查询方法和装置 | |
CN112948498A (zh) | 一种分布式系统全局标识的生成方法和装置 | |
CN111259282A (zh) | Url去重方法、装置、电子设备及计算机可读存储介质 | |
CN111343267B (zh) | 一种配置的管理方法及系统 | |
CN113760876A (zh) | 一种数据过滤方法和装置 | |
CN113760982A (zh) | 一种数据处理方法和装置 | |
CN112433757A (zh) | 一种确定接口调用关系的方法和装置 | |
CN116775167A (zh) | 一种业务处理方法、装置、电子设备及计算机可读介质 | |
CN109165259B (zh) | 基于网络附属存储的索引表更新方法、处理器及存储装置 | |
CN109284177B (zh) | 一种数据更新方法和装置 | |
CN115905307A (zh) | 数据存储方法及装置、电子设备、存储介质 | |
CN113722113A (zh) | 一种流量统计的方法和装置 | |
CN113779048A (zh) | 一种数据处理方法和装置 | |
CN112699116A (zh) | 一种数据处理方法和系统 | |
CN113726885B (zh) | 一种流量配额的调整方法和装置 | |
CN111104528A (zh) | 图片获取方法、装置及客户端 | |
CN113760860B (zh) | 一种数据读取方法和装置 | |
CN116431523B (zh) | 一种测试数据管理方法、装置、设备及存储介质 | |
CN113094332B (zh) | 一种文件管理方法和装置 | |
CN110750410B (zh) | 一种监听数据库日志的方法和装置 | |
CN117763038A (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 |