d-left 计数布隆过滤器

d-left 计数布隆过滤器


  计数的布隆过滤器(Count Bloom Filter)是为了弥补普通布隆过滤器不支持删除的缺陷而出现的,但是其大部分空间的值都为0,非常浪费空间。因此思科联合哈佛大学和斯坦福大学于 2006 年提出基于 d-left hashing来提高空间利用率的布隆过滤器, 与此同时还能得到更低的误判率。论文详见An Improved Construction for Counting Bloom Filters

  文中指出利用d-left hashing来构造d个相互隔离的子表,每个子表下包含若干个bucket,每个bucket下包含若干个cell,每个cell下包含一个哈希指纹和一个用于计数的counter,且子表是从左到右连续运行。

  d-left 计数布隆过滤器的原理:

  • 定义:将计数布隆过滤器的存储空间(通常为比特数组)划分为d个子表(d-left中的’d’),每个子哈希表包含n个bucket,每个bucket下包含若干个cell,每个cell下包含一个哈希指纹和一个用于计数的counter。
  • 插入:每个传入的数据都要经过哈希处理,得到一个由d+1部分组成的哈希值,高d段的值用于定位哈希子表中的bucket,第d+1段作为哈希指纹定位cell,插入时在d个位置中选择元素最少的一个,如果元素数量一样,优先选择最左边一个。如果cell的哈希指纹相同,则计数加 1。反之新加一个cell,用于计数的counter初始化为 1。
  • 删除:同插入逻辑找到对应哈希子表、bucket和cell,然后将用于计数的counter - 1,减到0时删除。
  • 查询:从左到右依次遍历d个哈希子表,只要其中一个位置的cell中有对应元素的哈希指纹,就判定存在。

  由此可见,d-left中的’d’描述的是将原来的哈希表拆分为多少个子表,left描述的是选择bucket的规则(元素相同则靠左优先)。
  以hello为例,处理过程如下:

  1. 根据r-left分为两个哈希子表,其每个哈希子表下包含4个bucket,插入hello之前的的现状如下图绿色部分所示;
  2. hello经过哈希函数后得到一个2+1段的哈希值(bucket1=2,bucket2=3,R1),其中bucket1和bucket2指定元素落在两个哈希子表的哪一个bucket中,R1则是指纹;
  3. 因为下图绿色部分现状所示两个哈希子表的bucket中的元素数量相同,根据靠左优先原则,当前hello的R1指纹落在哈希子表1中。

image.png
  原文中列出了d-left 计数布隆过滤器和原始计数布隆过滤器之间空间利用率和误判率推演过程,详情可阅读An Improved Construction for Counting Bloom Filters


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Redisson布隆过滤器是基于Redis实现的Java分布式布隆过滤器。它可以在多个JVM节点或其他进程中通过相同的KEY获取到布隆过滤器布隆过滤器的主要功能是判断某个元素是否存在于容器中,因此非常适合解决缓存穿透问题和检查数据是否重复的场景。使用Redisson布隆过滤器时,需要单独开一个定时任务来初始化布隆过滤器的数据,并在删除或更新数据时重新刷新布隆过滤器。虽然使用布隆过滤器可能稍显麻烦,但可以使用Redis的Set类型来替代。\[1\]\[2\] 在代码示例中,可以看到使用Redisson布隆过滤器的示例代码。首先通过redisson.getBloomFilter方法获取布隆过滤器实例,然后使用tryInit方法初始化布隆过滤器的容量和误差率。接下来可以使用add方法向布隆过滤器中添加元素,使用contains方法判断元素是否存在于布隆过滤器中。\[2\]\[3\] 总结来说,Redisson布隆过滤器是一种解决缓存穿透和检查数据重复的有效工具,但在使用时需要注意初始化和刷新布隆过滤器的操作。 #### 引用[.reference_title] - *1* *2* *3* [从头开始学Redisson--------布隆过滤器](https://blog.csdn.net/yanluandai1985/article/details/104848454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐只乐之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值