從另一個角度看大資料量處理利器:布隆過濾器

來源:互聯網
上載者:User

  思路:從簡單的排序談到BitMap演算法,再談到資料去重問題,談到大資料量處理利器:布隆過濾器。

情景1:對無重複的資料進行排序

@給定資料(2,4,1,12,9,7,6)如何對它排序?

     方法1:基本的排序方法包括冒泡,快排等。

     方法2:使用BitMap演算法

     方法1就不介紹了,方法2中所謂的BitMap是一個位元組,跟平時使用的數組的唯一差別在於操作的是位。

首先是開闢2個位元組大小的位元組,長度為16(該長度由上述資料中最大的數字12決定的)



 
      然後,讀取資料,2存放在位元組中下標為1的地方,值從0改為1,4存放在下標為3的地方,值從0改為1....結果


   

      最後,讀取該位元組,得到排好序的資料是:(1,2,4,6,7,9,12)


      比較方法1和方法2的差別:方法2中,排序需要的時間複雜度和空間複雜度很依賴與資料中最大的數字比如12,因此空間上講需要開2個位元組大小的記憶體,時間上需要遍曆完整個數組。當資料類似(1,1000,10萬)只有3個資料的時候,顯然用方法2,時間複雜度和空間複雜度相當大,但是當資料比較密集時該方法就會顯示出來優勢。

情景2:對有重複的資料進行判重

   資料(2,4,1,12,2,9,7,6,1,4)如何找出重複出現的數字?

       首先是開闢2個位元組大小的位元組,長度為16(該長度由上述資料中最大的數字12決定的)


   

      當讀取完12後,數組中的資料如:


      當讀取2的時候,發現數組中的值是1,則判斷出2是重複出現的。

應用

      應用1:某檔案中包含一些8位的電話號碼,統計出現的號碼的個數?(判斷有誰出現)

      8為最大是99 999 999,大約是99M的bit,12.5MB的記憶體,就可以統計出來出現的號碼。

 

      應用2:某檔案中包含一些8位的電話號碼,統計只出現一次的號碼?(判斷有誰出現並且指出現1次)

      需要擴充一下,可以用兩個bit表示一個號碼,0代表沒有出現過,1代表只出現過1次,2代表至少出現2次。 

 

      應用3:有兩個檔案,檔案1中有1億個10位的qq號碼,檔案2中有5千萬個10位qq號碼,判斷兩個檔案中重複出現的qq號。

     首先建立10的10次方個大小的位元組(佔用記憶體大約是1.25G),全部初始化為0,讀取第一個檔案,對應的qq號存放到對應的未知,數值改為1,如果重複出現仍是1.讀取完畢第一個檔案後,讀取第二個檔案,對應的位置為1則表示重複出現。

 

     應用4:有兩個檔案,檔案1中有1億個15位的qq號碼,檔案2中有5千萬個15位的qq號碼,判斷兩個檔案中重複出現的qq號。 


    應用4中,qq號碼上升為15位的時候,顯然記憶體是不夠用了,這個時候怎麼辦?使用Bloom
Filter(布隆過濾器)

 

Bloom Filter(布隆過濾器):

      對於Bit-Map分析一下,每次都會開闢一塊表示最大數值大小的bit數組,比如情景1中的16,將對應的資料經過映射到bit數組的下標,這其實是一種最簡單的hash演算法,對1去模。在上述應用4中,當qq號碼改為15位的時候,Bit-Map就不太好用了,如何改進呢?解決辦法:減少bit數組的長度,但是增加hash函數的個數

對於每一個qq號碼,我用K個hash函數,經過k次映射,得到k個不同位置,假設k=3,那麼對於一個qq號碼,映射到位元組中3個不同的位置


 

當讀取第二個包含5千萬個qq號碼的檔案的時候,使用同樣的3個hash函數進行映射,當3個位置全部是1的時候才表示出現過,否則表示沒有出現過。

有什麼疑問嗎?

      顯然,對於一個qq號碼,如果它在第一個檔案中沒有出現過,但是它映射的3個位置已經全部是1的情況會有嗎?答案是會的,但是這種機率是可控的,可控的意思是:這種誤差跟hash函數的個數和品質是有關係的,可以通過控制hash函數的個數和位元組的大小來控制誤差機率。至於表示3者之間的關係精確的數學公式就不再詳細研究了。

可以這樣講,布隆過濾器是Bit-Map的進一步擴充,對於大資料量判重,布隆過濾器可以在記憶體中進行判斷,避免了對磁碟的讀寫,效率是很高的。以上是自己關於兩者的理解,有錯誤望指教。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.