redis 和 bloom filter】的更多相关文章

今天打算使用redis 的bitset搞一个 bloom filter, 这样的好处是可以节省内存,坏处是可能在会有一些数据因为提示重复而无法保存. bloom filter 的大体原理就是通过不同的hash函数将一个字符串映射到几个不同的位,并将这几个不同的位设置为1. 如果在查找某个字符串的时候,发现通过hash映射后的位有的不为1,说明该字符串不存在. 如果发现所有的位都为1,那该字符串有一定的概率不存在,通常这个概率会很小. 相关内容可以查看: http://olylakers.itey…
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11632622.html 背景 比如刷抖音的时候,抖音会不停的推荐新的内容,而它每次推荐时候都要去重,以去掉那些我们已经看过的内容,问题是抖音是如何实现推送去重的? Bloom Filter方案 Bloom Filter就是专门用来解决这种去重问题的.它在起到去重作用的同时,在空间上还能节省90%以上,但是稍微有点不精确,有一定的误判概率. 可以把布隆过滤器理解成一个不怎么精确的set结构,当使用它的…
在Redis 缓存击穿(失效).缓存穿透.缓存雪崩怎么解决?中我们说到可以使用布隆过滤器避免「缓存穿透」. 码哥,布隆过滤器还能在哪些场景使用呀? 比如我们使用「码哥跳动」开发的「明日头条」APP 看新闻,如何做到每次推荐给该用户的内容不会重复,过滤已经看过的内容呢? 你会说我们只要记录了每个用户看过的历史记录,每次推荐的时候去查询数据库过滤存在的数据实现去重. 实际上,如果历史记录存储在关系数据库里,去重就需要频繁地对数据库进行 exists 查询,当系统并发量很高时,数据库是很难扛住压力的.…
算法背景 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储位置要么是磁盘,要么是内存.很多时候要么是以时间换空间,要么是以空间换时间. 在响应时间要求比较严格的情况下,如果我们存在内里,那么随着集合中元素的增加,我们需要的存储空间越来越大,以及检索的时间越来越长,导致内存开销太大.时间效率变低. 此时需要考虑解决的问题就是,在数据量比较大的情况下,既满足时间要求,又满足…
原文地址:https://blog.csdn.net/fouy_yun/article/details/81075432 前面的文章介绍了缓存的分类和使用的场景.通常情况下,缓存是加速系统响应的一种途径,通常情况下只有系统的部分数据.当请求了缓存中没有的数据时,这时候就会回源到DB里面.此时如果黑客故意对上面数据发起大量请求,则DB有可能会挂掉,这就是缓存击穿.当然缓存挂掉的话,正常的用户请求也有可能造成缓存击穿的效果. 缓存中无值(未宕机) 互斥锁 我们最先想到的应该是加锁获取缓存.也就是当获…
应用场景 主要是解决大规模数据下不需要精确过滤的场景,如检查垃圾邮件地址,爬虫URL地址去重,解决缓存穿透问题等. 布隆过滤器(Bloom Filter)是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难.hash原理Hash (哈希,或者散列)函数在计算机领域,尤其是数据快速查找领域,加密领域用的极广.其作用是将一个大的数据集映射到一个小…
[转载]布隆过滤器(Bloom Filter) 这部分学习资料来源:https://www.youtube.com/watch?v=v7AzUcZ4XA4 Filter判断不在,那就是肯定不在:Filter判断在,那只能说有一定几率在 有点乱啊,意思就是:布隆过滤器会倾向于判断在,这就是它的误差:它把可能不在的都说成是在. 用一个函数将元素映射到一个二进制数组中.当需要插入时,将插入元素映射为二进制位,如果数组中有至少对应的一个位不是1,就说明不在. 一个更完整的例子: 误差就是B!B本来不存在…
scrapy-redis + Bloom Filter分布式爬取tencent社招信息 什么是scrapy-redis 什么是 Bloom Filter 为什么需要使用scrapy-redis + Bloom Filter 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/tencent.py 编写 pipelines.py 编写 middlewares.py 编写 settings.py 搭建 redis 运行爬虫 结语 备注 什么是scrapy-redis 虽然 s…
Bloom Filter算法详解 什么是布隆过滤器 布隆过滤器(Bloom Filter)是 1970 年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数 (下面详细说),实际上你也可以把它简单理解为一个不怎么精确的set结构,当你使用它的contains方法判断某个对象是否存在时,它可能会误判.但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率. 当布隆过滤器说某个值存在时,这个值可能不存在:但是当它说不存在时,那么这个值…
Bloom Filter一般用于数据的去重计算,近似于HashSet的功能:但是不同于Bitmap(用于精确计算),其为一种估算的数据结构,存在误判(false positive)的情况. 1. 基本原理 Bloom Filter能高效地表征数据集合\(S = \lbrace x_1 ,x_2 ,...,x_n \rbrace\),判断某个数据是否属于这个集合.其基本思想如下:用长度为\(m\)的位数组\(A\)来存储集合信息,同时是有\(k\)个独立的hash函数\(h_i(1\le i \l…
阅读目录: 背景介绍 算法原理 误判率 BF改进 总结 背景介绍 Bloom filter(后面简称BF)是Bloom在1970年提出的二进制向量数据结构.通俗来说就是在大数据集合下高效判断某个成员是否属于这个集合.BF其优点在于: 插入和查询复杂度都是O(n) 空间利用率极高. 例子1: 像Yahoo这类的公共邮件服务提供商,总是需要过滤垃圾邮件. 假设有50亿个邮件地址,需要存储过滤的方法有: 所有邮件地址都存储到数据库. 缺点:每次都需要查询数据库,效率低. 使用Hashtable保存到内…
Bloom Filter 是由伯顿.布隆(Burton Bloom)在1970年提出的一种多hash函数映射的快速查找算法.它实际上是一个很长的二进制向量和一些列随机映射函数.应用在数据量很大的情况下. 算法 初始化一个m比特的值全为0的向量.选择k个不同的散列函数,散列函数的产生的值域范围是0~m-1. 1)元素加入过滤器    对于元素e1,通过k个散列函数分别产生了值为 h1 ,h2, ..., hk :    将二进制向量的第 h1 ,h2, ..., hk 位分别置为1:     2)…
参考文献: Bloom Filters - the math    http://pages.cs.wisc.edu/~cao/papers/summary-cache/node8.html    Bloom Filter概念和原理    http://blog.csdn.net/jiaomeng/article/details/1495500    BloomFilter--大规模数据处理利器    http://www.cnblogs.com/heaad/archive/2011/01/02…
原文:蘑菇先生,http://www.cnblogs.com/mushroom/p/4556801.html 背景介绍 Bloom filter(后面简称BF)是Bloom在1970年提出的二进制向量数据结构.通俗来说就是在大数据集合下高效判断某个成员是否属于这个集合.BF其优点在于: 插入和查询复杂度都是O(n) 空间利用率极高. 例子1: 像Yahoo这类的公共邮件服务提供商,总是需要过滤垃圾邮件. 假设有50亿个邮件地址,需要存储过滤的方法有: 所有邮件地址都存储到数据库.缺点:每次都需要…
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员. 结    构 二进制 召回率 100% 方    法 哈希函数 目录 1 简介 2 计算方法 3 优点缺点 4 简单例子 简介 编辑 Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员.如果检测结果为是,该元素…
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员.如果检测结果为是,该元素不一定在集合中:但如果检测结果为否,该元素一定不在集合中.因此Bloom filter具有100%的召回率.这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter 是牺牲了正确率和时间以节省空间. 召回率(Recall Rate,也叫查全率…
转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的算法,一直在听这个名词,但一直没有正儿八经的去了解,今天看到了一篇关于Bloom Filter 的讲解,真是有种沁人心脾的感觉.转过来加深自己的了解. 在开始转载之前,为了加深读者的印象,先介绍一下在BloomFilter里面含有的重要角色 先在脑中留下印象,然后在来消化转载的内容 Bloom Fi…
        Url Seen用来做url去重.对于一个大的爬虫系统,它可能已经有百亿或者千亿的url,新来一个url如何能快速的判断url是否已经出现过非常关键.因为大的爬虫系统可能一秒钟就会下载几千个网页,一个网页一般能够抽取出几十个url,而每个url都需要执行去重操作,可想每秒需要执行大量的去重操作.因此Url Seen是整个爬虫系统中非常有技术含量的一个部分.         为了提高过滤的效率,我们使用有极低误判率但是效率非常高的算法--Bloom Filter,已经有高手写好了B…
Bloom Filter概念和原理 焦萌 2007年1月27日 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive).因此,Bloom Filter不适合那些“零错误”的应用场合.而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空…
转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html   布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一…
Hadoop0.20.2 Bloom filter应用示例 2014-06-04 11:55 451人阅读 评论(0) 收藏 举报 1. 简介 参见<Hadoop in Action>P102 以及 <Hadoop实战(第2版)>(陆嘉恒)P69 2. 案例 网上大部分的说明仅仅是按照<Hadoop in Action>中的示例代码给出,这里是Hadoop0.20.2版本,在该版本中已经实现了BloomFilter. 案例文件如下: customers.txt 1,St…
在爬虫系统中,在内存中维护着两个关于URL的队列,ToDo队列和Visited队列,ToDo队列存放的是爬虫从已经爬取的网页中解析出来的即将爬取的URL,但是网页是互联的,很可能解析出来的URL是已经爬取到的,因此需要VIsited队列来存放已经爬取过的URL.当爬虫从ToDo队列中取出一个URL的时候,先和Visited队列中的URL进行对比,确认此URL没有被爬取后就可以下载分析来.否则舍弃此URL,从Todo队列取出下一个URL继续工作. 然后,我们知道爬虫在爬取网页时,网页的量是比较大的…
0. 科普1. 为什么需要Bloom Filter2. 基本原理3. 如何设计Bloom Filter4. 实例操作5. 扩展 0. 科普 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 1. 为什么需要Bloom Filter 举例说明:假设有2000万个url,现在判断一个新的url是否在这2000万个之中.可以有的思路: 将访问过的URL保存到数据库. 用Hash…
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员,这种检测只会对在集合内的数据错判,而不会对不是集合内的数据进行错判,这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter 是牺牲了正确率换取时间和空间. 如需要判断一个元素是不是在一个集合中,我们通常做法是把所有元素保存下来,然后通过比较知道它是不是在集合内,链…
什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, gmail等邮箱垃圾邮件过滤功能 这几个例子有一个共同的特点: 如何判断一个元素是否存在一个集合中? 常规思路 数组 链表 树.平衡二叉树.Trie Map (红黑树) 哈希表 虽然上面描述的这几种数据结构配合常见的排序.二分搜索可以快速高效的处理绝大部分判断元素是否存在集合中的需求.但是当集合里…
一.布隆过滤器介绍 Bloom Filter是一种空间效率很高的随机数据结构,Bloom Filter可以看做是对bit-map的扩展,它的原理如下: 当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位阵列(Bit Array)中的K个点,把它们置为1,检索时我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了. 1.如果这些点有任何一个0,那么被检索元素一定不存在: 2.如果都是1,那么被检索元素可能存在: 存在这种场景:有A,B二个数,A存在,但B不存在.假如利用Bl…
介绍 Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合.一般我们使用STL的std::set, stdext::hash_set,std::set是用红黑树实现的,stdext::hash_set是用桶式哈希表.上述两种数据结构,都会需要保存原始数据信息,当数据量较大时,内存就会是个问题.如果应用场景中允许出现一定几率的误判,且不需要逆向遍历集合中的数据时,Bloom Filter是很好的结构. 优点 1.    查询操作十分高效. 2.    节省空间. 3.…
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive).因此,Bloom Filter不适合那些“零错误”的应用场合.而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省. 集合表示和元素查询 下面我们具体来看Bloom…
Bloom Filter 算法 Bloom filter是由Burton Bloom 在1970年提出的,其后在P2P上得到了广泛的应用.Bloom filter 算法可用来查询某一数据是否在某一数据集合中.其长处是查询效率高.可节省空间.但其缺点是会存在一定的错误.因此Bloom filter 算法仅仅能应用于那些同意有一定错误的场合.可使用Bloom filter 算法的场合包含字典软件.分布式缓存.P2P网络和资源路由等等. 使用Bloom Filter我们能够推断一个元素是否在某一个集合…
海量数据处理算法—Bloom Filter 1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.它是一个判断元素是否存在集合的快速的概率算法.Bloom Filter有可能会出现错误判断,但不会漏掉判断.也就是Bloom Filter判断元素不再集合,那肯定不在.如…