前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >布隆过滤器

布隆过滤器

作者头像
兜兜毛毛
发布2019-10-23 15:59:11
5830
发布2019-10-23 15:59:11
举报
文章被收录于专栏:兜兜毛毛兜兜毛毛

什么是布隆过滤器

本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。

相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。

实现原理

与HashMap比较想象,不同之处在于布隆过滤器是存储的Bit位数组,内容值只有1 与 0 非常显著的减少了存储大小。所以布隆过滤器只能判断是否匹配,而无法获取对应匹配值。

了解HashMap数据结构的同学都应该知道HashMap会有概率发生碰撞,在发生碰撞时会生成链表或红黑树来解决,那布隆过滤器是如何解决这个问题的呢?

布隆过滤器数据结构
布隆过滤器数据结构
布隆过滤器数据结构

上图边表示分别存储A、B、C三个值,与下边数组的连接线分别表示不同的Hash值地址。通过过一个写入的值计算多个Hash地址,这样就可以尽量减少碰撞的可能,但绝对无法做到绝对不碰撞。

只能通过增加计算Hash的条数或增加数组长度来减少碰撞可能。

布隆过滤器如何支持删除

根据上边了解到的信息,我们知道因布隆过滤器是使用bit位数组存储的,如果支持删除操作的话,可能会影响其他值的匹配。那么我们还有其他方式来使布隆过滤器支持删除吗?

布隆过滤器支计数
布隆过滤器支计数

我们可以改变一下数据结构,将数组改为计数形式就可以实现,用空间来换功能。

适用场景

  1. 利用布隆过滤器减少磁盘 IO 或者网络请求,因为一旦一个值必定不存在的话,我们可以不用进行后续昂贵的查询请求。(缓存穿透)

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1ro14ignkt5pb

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现原理
    • 布隆过滤器数据结构
      • 布隆过滤器如何支持删除
      • 适用场景
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档