zoukankan      html  css  js  c++  java
  • Bloom Filter (2)

    如何选择合适的bitmap大小以及hash函数的个数?

    数学分析略,可参见wiki上面的页面(简单的概率论知识),结论如下:

    给定允许的错误概率p,以及元素个数n,总的bit数m应为:m >= -n*ln(p) / (ln2) / (ln2)

    譬如,如果给定错误率p为0.001,代入可得 m >= 14.4n

    给定n和m以后,选择多少个hash function也是一个问题,结论如下:

    hash函数的个数k应为:k = m * ln2 / n,也即 k = 0.7 * m / n.

    再次用上面的p=0.001的例子,m >= 14.4n, 那么k = 0.7 * 14.4 = 10

    如果p=0.005,则 m >= 11.0n, k = 0.7 * 11.0 = 8

    一个实际的例子,squid中使用的bloom filter,参见http://wiki.squid-cache.org/SquidFaq/CacheDigests

    squid的cache digests。cache digest的用处在于使squid server之间相互知道大家都有哪些页面的缓存。

    squid中的bloom filter设计:

    1, m/n的值由bits_per_entry确定,目前是5;

    2, k的值目前是4;

    3, hash function怎么设计的?目前,这四个hash function分别取MD5(URL, http method)的四个int值,然后对m取模;使用这个md5值的原因在于这个值已经应用于其他用途了,所以直接就可以拿来用。

    cache digest如何管理?

    1, peer之间用标准的http相互取,附带一个失效时间;

    2, 自己的cache digest会时不时的重建;


  • 相关阅读:
    关于npm无法安装依赖包以及安装包缓慢的解决方法
    centos 上安装nodejs v8.0.0
    nginx 负载均衡
    关于前端
    递归函数
    多重循环
    闭包
    spring boot集成mybatis(2)
    spring boot集成mybatis(3)
    spring boot集成mybatis(1)
  • 原文地址:https://www.cnblogs.com/qsort/p/2042035.html
Copyright © 2011-2022 走看看