布隆过滤器原理与场景

原理

一个很长的二进制向量和一系列随机映射函数 。
通过设置向量数组长度与定义多种随机hash函数,正向预热数据,反向查询数据。使用的hash函数越多,区分度就越高。

图解:

使用场景

  • 大数据判断是否存在:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1 的级别,但是当数据量起来之后,还是只能考虑布隆过滤器。

  • 解决缓存穿透:我们经常会把一些热点数据放在 Redis 中当作缓存,例如产品详情。 通常一个请求过来之后我们会先查询缓存,而不用直接读取数据库,这是提升性能最简单也是最普遍的做法,但是 如果一直请求一个不存在的缓存,那么此时一定不存在缓存,那就会有 大量请求直接打到数据库 上,造成 缓存穿透,布隆过滤器也可以用来解决此类问题。

  • 爬虫/ 邮箱等系统的过滤:平时不知道你有没有注意到有一些正常的邮件也会被放进垃圾邮件目录中,这就是使用布隆过滤器 误判 导致的。

  • 抖音重复内容不再推荐

  • 一段时间内短信发送去重

实现方式

1、Google 的 Guava 实现内存中的布隆过滤器,提供了封装了多种hash算法,根据参数逆向计算槽的长度与hash算法的使用的维度
2、Redis使用bitmap,需手动实现hash算法

布隆过滤器的缺陷:

1、它在判断元素是否在集合中时是有一定错误几率的,比如它会把不是集合中的元素判断为处在集合中;
增加多个hash算法,减少碰撞率
2、 不支持删除元素。
根据业务场景,有hash位计数(增加空间复杂度)

使用建议:

1、 选择多个 Hash 函数计算多个 Hash 值,这样可以减少误判的几率
2、 布隆过滤器会消耗一定的内存空间,所以在使用时需要评估你的业务场景下需要多大的内存,存储的成本是否可以接受。

如今的大数据技术应用场景,对实时性的要求已经越来越高。作为新一代大数据流处理框架,由于非常好的实时性,Flink独树一帜,在近些年引起了业内极大的兴趣和关注。Flink能够提供毫秒级别的延迟,同时保证了数据处理的低延迟、高吞吐和结果的正确性,还提供了丰富的时间类型和窗口计算、Exactly-once 语义支持,另外还可以进行状态管理,并提供了CEP(复杂事件处理)的支持。Flink在实时分析领域的优势,使得越来越多的公司开始将实时项目向Flink迁移,其社区也在快速发展壮大。 目前,Flink已经成为各大公司实时领域的发力重点,特别是国内以阿里为代表的一众大厂,都在全力投入,不少公司为Flink社区贡献了大量源码。如今Flink已被很多人认为是大数据实时处理的方向和未来,很多公司也都在招聘和储备了解掌握Flink的人才。 本教程将Flink理论与电商数据分析项目实战并重,对Flink基础理论知识做了系统的梳理和阐述,并通过电商用户行为分析的具体项目用多个指标进行了实战演练。为有志于增加大数据项目经验、扩展流式处理框架知识的工程师提供了学习方式。 二、教程内容和目标 本教程主要分为两部分: 第一部分,主要是Flink基础理论的讲解,涉及到各种重要概念、原理和API的用法,并且会有大量的示例代码实现; 第二部分,以电商作为业务应用场景,以Flink作为分析框架,介绍一个电商用户行为分析项目的开发实战。 通过理论和实际的紧密结合,可以使学员对Flink有充分的认识和理解,在项目实战中对Flink和流式处理应用的场景、以及电商分析业务领域有更深刻的认识;并且通过对流处理原理的学习和与批处理架构的对比,可以对大数据处理架构有更全面的了解,为日后成长为架构师打下基础。 三、谁适合学 1、有一定的 Java、Scala 基础,希望了解新的大数据方向的编程人员 2、有 Java、Scala 开发经验,了解大数据相关知识,希望增加项目经验的开发人员 3、有较好的大数据基础,希望掌握Flink及流式处理框架的求职人员
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页