布隆过滤器原理

布隆过滤器是一种高效的概率数据结构,主要用于存在性检测。它的核心数据结构是一个位数组(bit array),长度通常为 8 或更大。所有位初始化为 0。布隆过滤器的优势在于占用空间小、检测效率高,相比传统数据结构具有明显优势。

布隆过滤器的工作原理如下:

  • 使用多个不同的哈希函数对待映射的值进行哈希运算,得到多个哈希值
  • 将这些哈希值映射到位数组的不同位置上,将对应的位置 1
  • 要检测一个值是否存在于布隆过滤器中,只需对该值进行相同的哈希运算,检查所有映射位是否为 1。如果有任何一个位为 0,则该值一定不存在于布隆过滤器中。

例如,我们要将值 A 映射到布隆过滤器:

  • 使用多个哈希函数对 A 进行哈希运算,得到多个哈希值
  • 将这些哈希值对应的位置 1
  • 这样就将 A 映射到了布隆过滤器中

检测值 B 是否存在于布隆过滤器中时:

  • 对 B 进行相同的哈希运算,得到多个哈希值
  • 检查这些哈希值对应的位是否全为 1。如果全为 1,则有可能 B 存在于布隆过滤器中;如果任何一个位为 0,则 B 一定不存在。

布隆过滤器的一个重要特点是存在一定的误报率。当另一个值的哈希值覆盖了 A 的映射位时,就会产生误报。但布隆过滤器绝不会漏报,这使得它非常适合于判断某个值一定不存在的场景。


布隆过滤器的优点与缺点

布隆过滤器优点

布隆过滤器相比于其他数据结构具有以下主要优势:

  • 表示全集:布隆过滤器可以高效地表示一个集合,而无需存储集合中的每个元素。这使得它在需要存储大型集合时非常节省空间。
  • 节约空间:由于布隆过滤器只需要一个相对较小的位向量和几个哈希函数,因此在存储大型数据集时比其他数据结构更节省空间。
  • 缩短查询时间:布隆过滤器的查询操作只需要计算几个哈希函数并检查位向量中的位,因此查询速度非常快。
  • 哈希函数独立:布隆过滤器中使用的哈希函数彼此独立,这使得它们更容易与硬件并行化,从而进一步提高查询速度。
  • 保密性:布隆过滤器不需要存储元素本身,只存储哈希值,因此在某些对数据保密要求非常严格的场合具有明显优势。

布隆过滤器缺点

尽管布隆过滤器具有上述优点,但它也存在一些明显的缺点:

  • 误算率:布隆过滤器存在一定的误算率,即将不属于集合的元素判断为属于集合。这种误算率会随着存入元素的增加而增加。
  • 不可删除:一般情况下,布隆过滤器中的元素不能被删除。这可能会增加数据安全的风险,因为即使元素已被删除,它仍然存在于布隆过滤器中。
  • 补救措施:为了解决误算率的问题,常见的补救方式是建立白名单,存储可能被误判的元素。如果元素量较少,则可以使用散列表记录。为了降低误算率,还出现了许多布隆过滤器的变种,如计数布隆过滤器、可扩展布隆过滤器等。

因此,在使用布隆过滤器时,需要权衡其优缺点,并根据具体应用场景选择合适的布隆过滤器变种或其他数据结构。


布隆过滤器的应用

布隆过滤器是一种空间高效的概率数据结构,用于快速判断某个元素是否存在于一个集合中。它具有以下优势:

高效内存利用率

与传统的哈希表或位图相比,布隆过滤器在相同的错误率下需要更少的内存空间。

快速查询

布隆过滤器的查询操作时间复杂度为 O(k),其中 k 是哈希函数的个数,通常是一个很小的常数。

支持动态插入

布隆过滤器支持动态插入新元素,但不支持删除操作。

由于这些优势,布隆过滤器在以下场景中有广泛应用:

邮件黑名单过滤

 使用布隆过滤器快速判断邮件地址是否在黑名单中,避免对整个黑名单进行线性搜索。

URL 爬虫检测

判断某个 URL 是否已被爬虫访问过,防止重复爬取。

键值缓存层

在键值存储系统中,使用布隆过滤器快速判断某个键是否存在,避免每次查询都访问底层数据库,减轻数据库压力并防止缓存击穿问题。

数据一致性检查

在数据迁移后,使用布隆过滤器进行 ConsistencyCheck,快速检测数据是否丢失或重复。

垃圾邮件过滤

使用布隆过滤器存储已知垃圾邮件特征,快速判断新邮件是否为垃圾邮件。

总之,布隆过滤器在需要快速判断元素是否存在于大型数据集合中的场景下具有明显优势,可以显著提高系统性能并节省内存资源。


亚马逊云科技在数据查询方面的特点

亚马逊云科在数据查询方面的特点_立即开始查询

立即开始查询

Amazon Athena 是一种无服务器查询服务,允许您快速分析存储在 Amazon S3 中的数据,而无需设置或管理任何基础设施。它提供了一个内置的查询编辑器,您只需指向 S3 中的数据源、定义数据架构即可开始查询。使用 Athena,您无需进行复杂的提取、转换和加载 (ETL) 过程,就可以挖掘 S3 中存储的所有数据。Athena 采用了无服务器架构,因此您无需预先配置或管理任何基础设施,只需为查询付费即可。这种按需付费模式使您能够节省成本,并专注于数据分析而非基础设施管理。

亚马逊云科在数据查询方面的特点_安全集成

安全集成

Amazon Athena 提供了多层安全性,确保您的数据安全。您可以使用 Amazon Identity and Access Management (IAM) 策略来控制对 Athena 的访问权限。此外,Athena 与 Amazon S3 存储桶策略和访问控制列表 (ACL) 集成,从而控制对底层数据的访问。Athena 还与 Amazon Glue 数据目录集成,支持创建统一的元数据存储库。Glue 可以自动抓取数据源、发现数据、填充新表和分区定义,并维护架构版本控制。通过与 Glue 的集成,Athena 可以轻松访问和查询来自多个数据源的数据,同时保持数据治理和安全性。

亚马逊云科在数据查询方面的特点_可用性高且持久性强

可用性高且持久性强

Amazon Athena 是一项高度可用的服务,能够利用多个设施中的计算资源执行查询。如果某个设施暂时无法访问,Athena 会自动将查询路由到其他可用设施,确保查询的持续运行。此外,Athena 使用 Amazon S3 作为底层数据存储,从而使您的数据具有高可用性和持久性。S3 是一种高度可扩展、可靠且安全的对象存储服务,可为您的数据提供 99.999999999% 的持久性。通过利用 S3 的优势,Athena 确保您的数据始终可用且安全可靠。


布隆过滤器的工作流程

布隆过滤器是一种概率数据结构,用于测试某个元素是否属于一个集合。它由一个位数组和一组哈希函数组成。向布隆过滤器添加元素时,将元素通过每个哈希函数计算,并将结果位置在位数组中设置为 1。检查元素是否在集合中时,使用相同的哈希函数计算元素,如果任何结果位置为 0,则该元素肯定不在集合中;如果所有位置都为 1,则认为该元素在集合中,但可能存在误报。布隆过滤器可以分布式组织,以并行方式执行聚合计算。全局布隆过滤器被分割为等份,每个处理单元存储一份,从而允许布隆过滤器的大小增加,降低误报率。还可以实现并行布隆过滤器,利用共享无关的并行机器,通过复制或分布式的方式在多个处理单元上存储布隆过滤器。


布隆过滤器的内存占用优化方法

布隆过滤器是一种空间高效的概率数据结构,但在某些场景下仍需要优化内存占用。以下是一些布隆过滤器的内存优化方法:

布隆过滤器的内存占用优化方法_单哈希函数变体

单哈希函数变体

这种变体使用单个哈希函数为每个键生成一个范围在 [0, 1/ε)内的值,其中 ε 是期望的误报率。然后将这些值排序并使用 Golomb 编码等技术进行压缩,每个元素占用的空间接近 log(1/ε)比特。

布隆过滤器的内存占用优化方法_缓存块优化

缓存块优化

这种优化方法将每个键对应的 k 个哈希值定位到一两个处理器缓存块大小(通常为 64 字节)的块中,以减少潜在的缓存未命中,尽管这种方法比经典布隆过滤器多占用约 32% 的空间。

布隆过滤器的内存占用优化方法_流数据场景优化

流数据场景优化

对于流数据场景,可以采用稳定布隆过滤器和老化布隆过滤器等技术。稳定布隆过滤器使用计数布隆过滤器,插入时只递减固定数量的计数器。老化布隆过滤器使用两个布隆过滤器,当一个满时就交换使用。

布隆过滤器的内存占用优化方法_其他内存优化变体

其他内存优化变体

此外,还提出了 Bloomier 过滤器、紧凑逼近器、并行分区布隆过滤器和可扩展布隆过滤器等内存高效的布隆过滤器变体。


布隆过滤器的变种

布隆过滤器是一种空间高效的概率数据结构,用于测试某个元素是否属于一个集合。为了解决原始布隆过滤器设计的不同需求和局限性,提出了几种变种。

布隆过滤器的变种_可扩展布隆过滤器

可扩展布隆过滤器

可扩展布隆过滤器由研究人员于2007年提出,旨在动态适应存储元素的数量,同时确保最小的假阳性概率。它使用一系列具有不断增加容量和更严格假阳性概率的标准布隆过滤器。

布隆过滤器的变种_存储位置信息的变种

存储位置信息的变种

一种变种最初于 2014 年提出,用于存储位置信息,尤其是在位置隐私的加密协议中。该变种的关键特征是能够在单个数据结构中存储多个集合。

布隆过滤器的变种_快速和节省空间的变种

快速和节省空间的变种

研究人员于 2007 年研究了两种其他变种 - 一种快速变种,将哈希值定位在缓存大小的块中,以减少内存缓存未命中;另一种节省空间的变种,使用单个哈希函数和压缩技术来减少空间使用,尽管后者可能较慢。

布隆过滤器的变种_基于d-left哈希的变种

基于 d-left 哈希的变种

研究人员于 2006 年引入了一种基于 d-left 哈希的数据结构,在功能上等同于计数布隆过滤器,但使用的空间约为后者的一半。研究人员于 2012 年也提出了一种使用可变增量的方法,以改善计数布隆过滤器的假阳性概率,同时仍支持删除操作。


欢迎加入亚马逊云科技培训中心

欢迎加入亚马逊云科技培训中心

从 0 到 1 轻松上手云服务,获取更多官方开发资源及培训教程
从 0 到 1 轻松上手云服务,获取更多官方开发资源及培训教程
  • 快速上手训练营
  • 第一课:亚马逊云科技简介

    本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。

    亚马逊云科技技术讲师:李锦鸿

    第二课:存储与数据库服务

    您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。

    亚马逊云科技资深技术讲师:周一川

    第三课:安全、身份和访问管理

    在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。

    亚马逊云科技技术讲师:马仲凯
  • 账单设置与查看
  • 视频:快速完成税务设置

    部署时间:5 分钟

    视频:账户账单信息

    部署时间:3 分钟

    视频:如何支付账单

    部署时间:3 分钟

  • 动手实操
  • 快速上手云上无服务器化的 MySQL 数据库

    本教程将引导您创建一个Aurora Serverless 数据库并且连接上它。

    部署时间:10 分钟

    启动一台基于 Graviton2 的 EC2 实例


    本教程将为您讲解如何在云控制台上启动一台基于 Graviton2 的 EC2 实例。

    部署时间:5 分钟

    使用 Amazon Systems Manager 进行云资源统一跟踪和管理

    在这个快速上手教程中,您将学会如何使用 Amazon Systems Manager 在 Amazon EC2 实例上远程运行命令。

    部署时间:10 分钟

准备好体验亚马逊云科技提供的云服务了吗?

新用户享受中国区域 12 个月免费套餐

联系我们

联系我们

如需了解更多亚马逊云科技的专业服务和解决方案,请填写表单,我们的业务开发团队会与您联系
提交成功!
免费试用 12 个月

云服务器 EC2

每月免费使用 750 小时,两种实例类型可选,并可免费获得 750 小时公网 IPv4 地址