本文主要介紹我不 不知道布隆過濾器(詳細解釋布隆過濾器的原理、使用場景和注意事項),下面一起看看我不 不知道布隆過濾器(詳細解釋布隆過濾器的原理、使用場景和注意事項)相關資訊。
應用場景:
在文字處理軟件中,需要檢查一個英文單詞在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疑難問題)
電腦在線咨詢,電腦問題在線咨詢
三星是安卓機嗎(三星屬于安卓嘛)