本文主要介绍我不 不知道布隆过滤器(详细解释布隆过滤器的原理、使用场景和注意事项),下面一起看看我不 不知道布隆过滤器(详细解释布隆过滤器的原理、使用场景和注意事项)相关资讯。
应用场景:
在文字处理软件中,需要检查一个英文单词在fbi中的拼写是否正确,是否有嫌疑 的名字已经在嫌疑名单中,是否在网络爬虫中访问过某个网站,是否有邮箱垃圾邮件过滤功能网络1。番石榴-bloomfilter。
2.分布式场景:自定义bloom filter hashcode redis getbit
原则:
bloom filter cache,缓存,比如redis和hashmap,在内存中存储数据。缓存和过滤器具有相同的效果。这两者是互补的。
原理:与hashmap将元素映射到特定的链表不同,filter将元素分散到一个二进制向量中。
底层:使用一个长二进制向量和一个映射函数。
注意:检索一个元素,如果检索结果是该元素不在集合中,那么一定是正确的(表示不在)。如果检索结果是元素在集合中,那么有一定概率判断是错误的(或者不在集合中)
优点:空间效率和查询时间远超一般算法。
缺点:有一定的误识率,删除困难。
判断错误:b实际不存在,但判断结果是存在:映射错误。
特点:判断不存在肯定是对的,判断存在也可能是错的。
如果你判断 真实存在 ?去数据库进一步确认。
bloom filter使用场景:前面过滤一次,过滤掉不存在的元素(不存在意味着不存在),所以你不 不需要去数据库查询。
但它和cache是一样的,后面必须跟一个真实的数据存储系统(db,file)。
前面是预处理模块,后面是数据权限。
番石榴[bloomfilter]使用简单
番石榴依赖:
依赖关系groupidcom.google.guava/groupid工件id guava/工件id版本19.0/version/依赖关系调整参数fpp:手动设置错误率为0.0001 //亿待处理数据,使用大小为64mb的位图bloomfilterstringfloom filter = bloomfilter . create(funnels . string漏斗(charset.defaultcharset),size,0.0001);//1%,有个概率问题,bloom越大,职业越多。空间越大,但错误概率降低bloom filter bloom filter = bloom filter。创建(漏斗。字符串漏斗(字符集。defaultchars测试计划:将100w数据放入bloom来判断 不存在 100w元素和 存在 100w个元素不存在的概率。
@ test public void mmm{ int size = 1000 _ 000;//默认fpp 0.03 bloom filterstringfloom filter = bloom filter . create(funnels . string funnel(charset . default charset),size);/for(int i = 0;i尺寸;i){ bloom filter . put(i );}//确定现有元素for(int i = 0;i尺寸;i){ boolean exist = bloom filter . might contain(i );如果(!存在){//如果确定不存在,那就一定不存在。system . out . println( 找到漏网之鱼了!!! i);//此语句不执行} }//不存在的元素确定为int error = 0;for(int i = size;i尺寸* 2;i){ boolean exist = bloom filter . might contain(i );if (exist) {//如果确定存在,也可能不存在。错误;//system . out . println( 哦,吼~判断失误!!! i);} } system . out . println( 误判率: (错误* 1.0)/大小);// 0.030094}
分布式定制:hashcode redis
//自定义一个bloom filter公共静态类my bloom filter {//定义位图的大小,一般需要定义为整数幂私有整数上限为2;public mybloomfilter(整数cap){ this . cap = cap;}//实现一个哈希函数public long hash code (string value,integer seed){ long result = 0l;for(int i = 0;i value . length;i){ result = result * seed value . charat(i);}返回结果(cap-1);}}将位图放入reids
redis getbit命令用于获取键存储的字符串值的指定偏移量处的位。
jedis =新jedis( 本地主机 , 6379);mybloomfilter = new mybloomfilter(129);//要处理1亿个数据,使用大小为64mb // 1的位图。取当前userid longuserid = elements。迭代器。下一个。get userid;// 2.计算位图中的偏移量long offset = mybloomfilter . hashcode(userid . tostring,61);// 3.使用redis的getbit命令判断对应位置boolean isexist = jedis的值。get bit(位图键,偏移量);如果(!isexist ){ //如果不存在,设置1 jedis。对应位图位置的setbit(位图关键字,偏移量,true);//更新redis中保存的计数值long uvcount = 0l//初始计数值字符串uvcountstring = jedis . hget(counthashname,count key);if( uvcountstring!= null! 。equals(uvcountstring))uv count = long . value of(uvcountstring);jedis.hset(counthashname,countkey,string . value of(uv count 1));out.collect(新页面视图计数( 紫外线 ,windowend,uv count 1));}
标签:
元素不存在
了解更多我不 不知道布隆过滤器(详细解释布隆过滤器的原理、使用场景和注意事项)相关内容请关注本站点。
苹果平板充电快耗电也快是怎么啦(苹果平板充电好慢啊)
金士顿和三星固态硬盘怎么选择
苹果手机的网关怎么看(苹果电脑默认网关在哪里)
电脑输入最佳预设值并开机是什么意思(输入最佳预设并开机)
手机相册下载免费版,下载相册到手机
不了解布隆过滤器(详解布隆过滤器的原理、使用场景和注意事项)
ss游戏rpg,找一个很久以前的RPG游戏
怎么找到手机里的垃圾文件,如何调出手机中的垃圾回收站
qq中屏蔽对方消息对方知道吗(微信朋友圈屏蔽对方消息对方知道吗)
手机一直发烫且耗电快怎么回事(手机一直发烫且耗电快怎么办)
西数移动硬盘修理
笔记本电脑硬盘固态和机械的区别,联想笔记本电脑硬盘是固态还是机械
2016020是小米几(2016111是小米几)
微信怎么在朋友圈地址,微信怎么设置朋友圈地理位置
华硕win7系统恢复出厂设置详细步骤教程图(华硕win7系统怎么恢复出厂设置)
redmi note7支持nfc功能吗(红米note7可以刷门禁卡吗)
萤石云摄像头app下载安装,萤石监控手机安装方法
word软件出问题了怎么恢复(word疑难问题)
电脑在线咨询,电脑问题在线咨询
三星是安卓机吗(三星属于安卓嘛)