• 布隆过滤器redis缓存


    Bloom Filter布隆过滤器
    算法背景
    如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希
    表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘,要么是内存。很多时候要么是以时间换空间,要么是以空间换时
    间。
    在响应时间要求比较严格的情况下,如果我们存在内里,那么随着集合中元素的增加,我们需要的存储空间越来越大,以及检索的时间越
    来越长,导致内存开销太大、时间效率变低。
    此时需要考虑解决的问题就是,在数据量比较大的情况下,既满足时间要求,又满足空间的要求。即我们需要一个时间和空间消耗都比较
    小的数据结构和算法。Bloom Filter就是一种解决方案。
    Bloom Filter 概念
    布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以
    用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
    Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。
    它是一个判断元素是否存在集合的快速的概率算法。Bloom Filter有可能会出现错误判断,但不会漏掉判断。也就是Bloom Filter判断元
    素不再集合,那肯定不在。如果判断元素存在集合中,有一定的概率判断错误。因此,Bloom Filter”不适合那些“零错误的应用场合。
    而在能容忍低错误率的应用场合下,Bloom Filter比其他常见的算法(如hash,折半查找)极大节省了空间。
    Bloom Filter 原理
    布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我
    们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检元素一定不在;如果都是1,则被检
    元素很可能在。这就是布隆过滤器的基本思想。
    Bloom Filter跟单哈希函数Bit-Map不同之处在于:Bloom Filter使用了k个哈希函数,每个字符串跟k个bit对应。从而降低了冲突的概
    率。


    Bloom Filter的缺点
    bloom filter之所以能做到在时间和空间上的效率比较高,是因为牺牲了判断的准确率、删除的便利性
    存在误判,可能要查到的元素并没有在容器中,但是hash之后得到的k个位置上值都是1。如果bloom filter中存储的是黑名单,
    那么可以通过建立一个白名单来存储可能会误判的元素。
    删除困难。一个放入容器的元素映射到bit数组的k个位置上是1,删除的时候不能简单的直接置为0,可能会影响其他元素的判
    断。可以采用Counting Bloom Filter
    Bloom Filter 实现
    布隆过滤器有许多实现与优化,Guava中就提供了一种Bloom Filter的实现。
    在使用bloom filter时,绕不过的两点是预估数据量n以及期望的误判率fpp,
    在实现bloom filter时,绕不过的两点就是hash函数的选取以及bit数组的大小。
    对于一个确定的场景,我们预估要存的数据量为n,期望的误判率为fpp,然后需要计算我们需要的Bit数组的大小m,以及hash函数的个
    数k,并选择hash函数  
    (1)Bit数组大小选择
      根据预估数据量n以及误判率fpp,bit数组大小的m的计算方式:
    (2)哈希函数选择
    由预估数据量n以及bit数组长度m,可以得到一个hash函数的个数k:
    哈希函数的选择对性能的影响应该是很大的,一个好的哈希函数要能近似等概率的将字符串映射到各个Bit。选择k个不同的哈希函数比较
    麻烦,一种简单的方法是选择一个哈希函数,然后送入k个不同的参数

  • 相关阅读:
    演练:根据安全角色筛选站点地图节点
    请单击下面的按钮,以重定向到可以选择新数据存储区的页。下面的消息可能会有助于诊断问题: 无法连接到 SQL Server 数据库。
    ASP.NET验证控件
    VS2008样式图片背景
    .net面试题大全(有答案)
    ASP.NET角色权限设置(参考MSDN)了解角色管理
    什么是MFC,使用MFC有什么好处?
    ASP.NET C# 之 Activex用C#编写ActiveX控件(三)
    一个分析飞信的牛人网站
    智能手机程序安装三法
  • 原文地址:https://www.cnblogs.com/zhanggguoqi/p/10571225.html
Copyright © 2020-2023  润新知