1. 程式人生 > >BloomFilter–大規模資料處理利器

BloomFilter–大規模資料處理利器

Bloom Filter是由Bloom1970年提出的一種多雜湊函式對映的快速查詢演算法。通常應用在一些需要快速判斷某個元素是否屬於集合,但是並不嚴格要求100%正確的場合。

例項

  為了說明Bloom Filter存在的重要意義,舉一個例項:

  假設要你寫一個網路爬蟲程式(web crawler)。由於網路間的連結錯綜複雜,爬蟲在網路間爬行很可能會形成。為了避免形成,就需要知道爬蟲程式已經訪問過那些URL。給一個URL,怎樣知道爬蟲程式是否已經訪問過呢?稍微想想,就會有如下幾種方案:

1. 將訪問過的URL儲存到資料庫。

2. 

HashSet將訪問過的URL儲存起來。那隻需接近O(1)的代價就可以查到一個URL是否被訪問過了。

3. URL經過MD5SHA-1等單向雜湊後再儲存到HashSet或資料庫。

4. Bit-Map方法。建立一個BitSet,將每個URL經過一個雜湊函式對映到某一位。

  方法1~3都是將訪問過的URL完整儲存,方法4則只標記URL的一個對映位。

  以上方法在資料量較小的情況下都能完美解決問題,但是當資料量變得非常龐大時問題就來了。

  方法1的缺點:資料量變得非常龐大後關係型資料庫查詢的效率會變得很低。而且每來一個URL就啟動一次資料庫查詢是不是太小題大做了?

  方法2的缺點:太消耗記憶體。隨著URL的增多,佔用的記憶體會越來越多。就算只有1億個URL,每個URL只算50個字元,就需要5GB記憶體。

  方法3:由於字串經過MD5處理後的資訊摘要長度只有128BitSHA-1處理後也只有160Bit,因此方法3比方法2節省了好幾倍的記憶體。

  方法4消耗記憶體是相對較少的,但缺點是單一雜湊函式發生衝突的概率太高。還記得資料結構課上學過的Hash表衝突的各種解決方法麼?若要降低衝突發生的概率到1%,就要將BitSet的長度設定為URL個數的100倍。

. Bloom Filter的演算法

廢話說到這裡,下面引入本篇的主角

–Bloom Filter。其實上面方法4的思想已經很接近Bloom Filter了。方法四的致命缺點是衝突概率高,為了降低衝突的概念,Bloom Filter使用了多個雜湊函式,而不是一個。

   Bloom Filter演算法如下:

建立一個mBitSet,先將所有位初始化為0,然後選擇k個不同的雜湊函式。第i個雜湊函式對字串str雜湊的結果記為histr),且histr)的範圍是0m-1 

(1) 加入字串過程

  下面是每個字串處理的過程,首先是將字串str“記錄BitSet中的過程:

  對於字串str,分別計算h1str),h2str…… hkstr)。然後將BitSet的第h1str)、h2str…… hkstr)位設為1

 

  很簡單吧?這樣就將字串

相關推薦

BloomFilter——大規模資料處理利器

Bloom Filter是由Bloom在1970年提出的一種多雜湊函式對映的快速查詢演算法。通常應用在一些需要快速判斷某個元素是否屬於集合,但是並不嚴格要求100%正確的場合。 例項   為了說明Bloom Filter存在的重要意義,舉一個例項:

BloomFilter大規模資料處理利器(解決空查問題)尋找共同的URL

給定a、b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4G,讓你找出a、b檔案共同的url? 原文 BloomFilter–大規模資料處理利器 Bloom Filter是由Bloom在1970年提出的一種多雜湊函式對映的快速查詢演算法

那些優雅的資料結構(1) : BloomFilter——大規模資料處理利器

import java.util.BitSet;publicclass BloomFilter  {/* BitSet初始分配2^24個bit */privatestaticfinalint DEFAULT_SIZE =1<<25; /* 不同雜湊函式的種子,一般應取質數 */privatesta

ZZ那些優雅的資料結構(1) : BloomFilter——大規模資料處理利器

原文來自:http://www.cnblogs.com/heaad/archive/2011/01/02/1924195.html BloomFilter——大規模資料處理利器   Bloom Filter是由Bloom在1970年提出的一種多雜湊函式對映的快速

BloomFilter大規模資料處理利器

Bloom Filter是由Bloom在1970年提出的一種多雜湊函式對映的快速查詢演算法。通常應用在一些需要快速判斷某個元素是否屬於集合,但是並不嚴格要求100%正確的場合。 一. 例項   為了說明Bloom Filter存在的重要意義,舉一個例項:   假設要你寫一

bloomfilter大規模資料處理利器

import java.util.BitSet;publicclass BloomFilter  {/* BitSet初始分配2^24個bit */privatestaticfinalint DEFAULT_SIZE =1<<25; /* 不同雜湊函式的種子,一般應取質數 */privatesta

大規模資料處理利器BloomFilter

#include <stdio.h>#include <stdlib.h>#include <string.h>unsigned int jshash(const char *s, unsigned size);unsigned int sdbmhash(const ch

資料量越發龐大怎麼辦?新一代資料處理利器Greenplum來助攻

作者:李樹桓 個推資料研發工程師   前言:近年來,網際網路的快速發展積累了海量大資料,而在這些大資料的處理上,不同技術棧所具備的效能也有所不同,如何快速有效地處理這些龐大的資料倉,成為很多運營者為之苦惱的問題!隨著Greenplum的異軍突起,以往大資料倉庫所面臨的很多問題都得到了有效解決,Greenplu

探索Greenplum的實踐,瞭解新一代大資料處理利器

作者:李樹桓 個推資料研發工程師 前言:近年來,網際網路的快速發展積累了海量大資料,而在這些大資料的處理上,不同技術棧所具備的效能也有所不同,如何快速有效地處理這些龐大的資料倉,成為很多運營者為之苦惱的問題!隨著Greenplum的異軍突起,以往大資料倉庫所面臨

python大規模資料處理技巧之一:資料常用操作

面對讀取上G的資料,python不能像做簡單程式碼驗證那樣隨意,必須考慮到相應的程式碼的實現形式將對效率的影響。如下所示,對pandas物件的行計數實現方式不同,執行的效率差別非常大。雖然時間看起來都微不足道,但一旦執行次數達到百萬級別時,其執行時間就根本不可能

Excel較大規模資料處理例項(可直接用)python實現

問題是這樣的, 我是我們學校的寒招隊伍的負責人。但是管理的人數實在是太多了。所以在這個地方的,我就想用下指令碼去幫助自己進行管理。從效果來看,還是非常方便的。 故事情節: 這次,我和兩三個小夥伴們要一起先舉辦個去全員大會。但是本來會議人員數量

大規模資料處理漫談【2】

   上回說到了磁碟的一些特性,感覺不說說檔案不太妥。以及對比檔案系統和raw device的優劣。    在目前的各種檔案系統中,JFS是一種比較適合大規模資料處理的檔案系統,但常用的依然是ext2,ext3. 不同的檔案系統受到特定業務的影響在保持通用的前提下,各有側重

大規模資料處理漫談【1】

當然也是我發的了,以後我計劃在這裡以及我的另外一個部落格 繼續該連載,希望廣大網友關注,感興趣的網頁可以轉載,不註明也沒關係,我只是希望推廣大規模資料處理技術,如果能對大家學習工作有所幫助,十分欣慰。 我此前寫過《走進搜尋引擎》,翻譯了《Managing gigabyte

大規模資料處理的難點--記憶體和磁碟

以下內容轉載自《大規模Web服務開發技術》大規模資料的難點在於無法在記憶體中計算,這是因為:無法再記憶體中計算的話,就必須搜尋磁碟上的資料但是磁碟十分緩慢,I/O十分耗費時間記憶體和磁碟的速度差異--記憶體快10萬-100萬倍為什麼這麼慢?因為記憶體是電子產品,其搜尋速度和物

BloomFilter——大規模數據處理利器

map left 求100 創建 pan 劃分 保存 二進制位 page Bloom Filter是由Bloom在1970年提出的一種多哈希函數映射的快速查找算法。通常應用在一些需要快速判斷某個元素是否屬於集合,但是並不嚴格要求100%正確的場合。 一、實例 為了說明Blo

一文詳解大規模資料計算處理原理及操作重點

摘要: 大資料技術主要針對的是大規模資料的計算處理問題,那麼要想解決的這一問題,首先要解決的就是大規模資料的儲存問題。 一、RAID技術 大資料技術主要針對的是大規模資料的計算處理問題,那麼要想解決的這一問題,首先要解決的就是大規模資料的儲存問題。大規模資料儲存要解決的核心問題有三個方面:

第6周 處理非結構化資料利器Mongodb

mongodb:面向文件的nosql mongodb官網:http://www.mongodb.org/ 10gen官網:http://www.mongodb.com/ 面向文件的儲存引擎,可以方便的支援非結構化資料 全面的索引支援,可以在任意屬性上建立索引 資料庫本身

海量資料處理BloomFilter

一提到元素查詢,我們會很自然的想到HashMap。通過將雜湊函式作用於key上,我們得到了雜湊值

Spark Streaming:大規模流式資料處理

提到Spark Streaming,我們不得不說一下BDAS(Berkeley Data Analytics Stack),這個伯克利大學提出的關於資料分析的軟體棧。從它的視角來看,目前的大資料處理可以分為如以下三個型別。  複雜的批量資料處理(batch data processing),通常的時間跨度

資料:網際網路大規模資料探勘與分散式處理pdf

目  錄第1章  資料探勘基本概念  11.1  資料探勘的定義  11.1.1  統計建模  11.1.2  機器學習  11.1.3  建模的計算方法  21.1.4  資料彙總  21.1.5  特徵抽取  31.2  資料探勘的統計限制  41.2.1  整體情報預警  41.2.2  邦弗朗尼原理