从名字可以看出它有过滤的作用。它可以过滤之前遇到过或者是没有遇到过的数据。比如:你是这个过滤器,你要免费发钱,一群人从你面前走过去,但是每个人只能领取一次,你每见一个人就判断下这个人之前来过没有,没有领过钱,就给他钱,然后记录一下,如果判断这个人来过了,就把他赶走。
上面的这个场景是可以通过其他方式来解决的,比如hashmap之类的。但是任意其他办法,都需要占用很大的存储空间,而布隆过滤器不管过来的数据是多少,它占用的存储空间都是恒定的。比如:全中国14亿人都要到你这里领钱,那么用布隆过滤器就能够节省大量的存储空间。
布隆过滤器添加数据的流程是有一个固定长度,比如12k长度的数组,然后来一个数,就对这个数据进行hash一下,hash之后值得每一位要不然是0或者1,对于每一位和数据比对如果不是1,则将数组的值设置成1。判断数据是否存在的流程是,也是需要hash,然后判断hash之后的值在已有数据中是不是都是1,如果都是1,则说明这个数据可能匹配,但是如果一旦有不是零的,则说明这个人一定没有来过。
根据刚才介绍的大致原理,可以知道当说不匹配的时候,肯定是不匹配的。但是如果说匹配的话,有可能是因为hash冲突造成的。如果想要解决hash冲突的问题,可以使用几个不同的hash函数来进行运算,这样能够大幅度地减少hash冲突的概率,但是不能完全避免。
根据布隆过滤器的特性,常见应用的场景是,比如:快速识别这篇文章是否给用户推送过。爬虫去重,已经爬过的网页就不需要再爬了。垃圾邮件的过滤。等等。
------------------------
欢迎访问个人网站: