bloom filter

場景

在做廣告定向投放時,我們選出了一批用戶,用設備ID來標識他們。如果我們定向出了1000萬個用戶。用戶獲取服務時,我們需要判斷是否在該集合中,如果在的話,將廣告一起返回。如何判斷呢?

  • 存入數據庫中,比如redis。優點是實現簡單,缺點是內存佔用大
  • 使用bloom filter算法。優點是使用較小的內存空間,就可以判斷一個給定的值是否在一個大的集合中,缺點是有一定的誤判率,可以將誤判率優化到0.009%,而這個是可以接受的

bloom filter原理

現有資源 長度爲m的bit數組array,值都設置爲0。同時有k個hash算法,每個算法能均勻的產生0到m-1的數值。
構建bloom filter 對於每一個輸入的key,用hash算法產生k個hash值,將array的這k個位置均設成1。該網站Example有相應的演示。
判斷 輸入一個key,用hash算法產生k個hash值,如果array的這k個位置都爲1,則key可能在這個集合內。否則,該key一定在不在這個集合內

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章