美文网首页
布隆过滤器应用场景和简单原理

布隆过滤器应用场景和简单原理

作者: realPeanut | 来源:发表于2020-11-15 23:27 被阅读0次

场景

一般在流量较大的情况下,我们使用了缓存(redis、memcache...)来避免请求直接打到关系型数据库上(mysql、oracle...),此时可能发生的情况是,被人恶意请求了未缓存的数据(数据可能存在,也可能不存在),这时候就会有大量的请求直接
打到mysql、orcle 上,拖垮我们的服务,这种情况我们称为缓存穿透。为了防止这种情况出现,一种简单暴力的方法是,缓存不存在直接返回null,但是这种处理容易误伤,我们也不可能将所有的数据都缓存到nosql中,内存多贵呀。另一种方法就是使用布隆过滤器。

原理

一个简单的应用场景,布隆过滤器其实是将URL(这里特指请求)与MySQL(这里代指关系型数据库)进行隔离,我们提前将已缓存的,已存在的value对应的URL存入布隆过滤器,下次请求进来,直接在布隆过滤器中查找请求的URL是否存在,存在则允许请求,不存在直接禁止访问即可。这样就避免了MySQL被拖垮。

实际上,布隆过滤器的核心是hash+bitArray,即对存入的值进行多次hash,hash得到的值是bitArray的index,hash(key)->index,得到index后将bitArray对应的index位置为1,即

bitArray[index] = 1

因为要进行多次hash,所以可能会在多个index上置1.这样一来在布隆过滤器中确定要查找的URL是否存在只需对URL进行hash 然后得到index,判断bitArray[index]是否为1即可。应为要判断多次hash,所以假设布隆过滤器重的hash韩式一共有H个,那么整个查找的过程的时间复杂度就是O(H),
显而易见,对比使用redis的sort等等其他数据结构,高下立现,更关键的是我们不用保存具体的URL,只需记录对应index位的值为0或1即可,太省空间了吧。

bitArray = [0,1,0,1]//初始化之后的bitArray

url = "baidu.com/huaidan"
if bitArray[hash1(url)] == 1 && bitArray[hash1(url)] == 1 {
    printf("url 可能在布隆过滤器中")
}

if bitArray[hash1(url)] == 0 || bitArray[hash1(url)] == 0 {
    printf("url 一定不在布隆过滤器中")
}



优势

不需要存储数据本身,只用比特表示,因此空间占用相对于传统方式有巨大的优势,并且能够保密数据;
时间效率也较高,插入和查询的时间复杂度均为O(k);
哈希函数之间相互独立,可以在硬件指令层面并行计算

  • 不用存储数据本身
  • 时间复杂度简单为O(H) H为hash函数的数量
  • 节省空间,极端情况1bit就能判断8个URL

劣势

  • 存在hash 碰撞,不能保证百分百存在
  • 只能查询和插入,不能删除

注意事项

  • URL不存在布隆过滤器中是百分百确定的,但是存在这一状态不能百分百保证,因为可能存在hash碰撞,导致位冲突,即不同的URL hash之后的index可能是相同的。
  • redis hash插件使用方法 link

相关文章

  • redis 的bloomfilter

    详解布隆过滤器的原理、使用场景和注意事项 布隆过滤计算器 布隆过滤器(Bloom Filter)详解 java实现...

  • 布隆过滤器应用场景和简单原理

    场景 一般在流量较大的情况下,我们使用了缓存(redis、memcache...)来避免请求直接打到关系型数据库上...

  • Guava - 布隆过滤器的使用

    布隆过滤器简单介绍 布隆过滤器介绍 maven引入 布隆过滤器的使用 参考及拓展 Guava的布隆过滤器 布隆过滤...

  • 面试题 延伸 之 布隆去重的原理及实现

    什么情况下需要布隆过滤器? 布隆过滤器原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几...

  • 布隆过滤器

    布隆过滤器 布隆过滤器的原理非常简单,将要过滤的东西通过k个hash函数计算,映射到bitmap数组上(bitma...

  • 布隆过滤器

    详解布隆过滤器的原理,使用场景和注意事项 概念理解 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(pr...

  • 布隆过滤器

    布隆过滤器 布隆过滤器不是专属于redis,此处是用来和 redis 结合使用。 1、场景 我们用 HyperLo...

  • kata05:布隆过滤器

    这次kata的内容:实现一个布隆过滤器 布隆过滤器 (Bloom Filter) 什么是布隆过滤器呢?简单来说, ...

  • 布隆过滤器

    原文转载 -> 详解布隆过滤器的原理、使用场景和注意事项(https://www.jianshu.com/p/21...

  • 布隆过滤器(Bloom Filter)的原理和实现

    布隆过滤器使用场景 之前在《数学之美》里面看到过布隆过滤器的介绍。那么什么场景下面需要使用布隆过滤器呢? 看下下面...

网友评论

      本文标题:布隆过滤器应用场景和简单原理

      本文链接:https://www.haomeiwen.com/subject/dcoobktx.html