zoukankan      html  css  js  c++  java
  • 布隆过滤器的设计原理

    说道布隆过滤器,就免不了说到缓存穿透

    缓存穿透

    在高并发下,查询一个并不存在的值时,缓存不会被命中,导致大量请求直接落到数据库。

    布隆过滤器的设计原理

    (这里是重点,再看不懂,私聊我)

    数据库所有的键,经过一次哈希运算,收敛到(A,B)区间,

    某个待查询的键K,如果经过同样的哈希运算,落在(A,B)区间,因为存在哈希碰撞,所以我们说K有可能属于数据库中所有的键中的一员;

    但是如果该K经过哈希运算,没有落在收敛区间,则证明K一定不属于原数据库键。

    那为什么要使用多个哈希函数?
    因为经过一次哈希函数落在收敛区间,只能说该K有可能属于原数据库键,但是如果经过多个哈希函数,还是落到收敛区间,概率叠加,无形中增大了该K属于原数据库键的概率。

    总体上看: 布隆过滤器是利用了哈希算法的单向收敛性+概率论

    时间复杂度: 要判断N是否属于原查询键,只需要经过几次哈希运算,所以布隆过滤器判断的过程是很快的,

    布隆过滤器的应用

    很明显,布隆过滤器存在误报, 经过上面的分析:误报率跟哈希碰撞和有几个哈希函数有关,

    成熟的布隆过滤器,这些你都不需要考虑,只需要指定 ① 哈希结果的存储区 ②容量 ③误报率

    总结

    布隆过滤器是 哈希函数单向收敛和 概率论的完美结合,

    从上面的分析看,解决缓存穿透,我们在Cache前面预热一个布隆过滤器,就可以阻止绝大部分非法的查询键。

    https://www.cnblogs.com/doondo/p/15070715.html

     

     

     

     

     

     

    小蚊子大人
  • 相关阅读:
    P2149 [SDOI2009]Elaxia的路线
    P1346 电车
    P3174 [HAOI2009]毛毛虫
    P3047 [USACO12FEB]附近的牛Nearby Cows
    P4053 [JSOI2007]建筑抢修
    P2607 [ZJOI2008]骑士
    [HNOI2006]马步距离
    [POI2014]Hotel
    [BZOJ3856]Monster
    [BZOJ2819]Nim
  • 原文地址:https://www.cnblogs.com/ywsheng/p/14970915.html
Copyright © 2011-2022 走看看