LevelDB Bloom原始碼精讀 資料結構

2021-09-23 23:31:39 字數 1321 閱讀 6511

一、原理分析

bloomfiler(布隆過濾器)是由howard bloom在2023年提出的二進位制向量資料結構,怎麼來理解「二進位制向量資料結構」?

我們將其分解成「二進位制」、「向量」和「資料結構」來分別理解。

1、二進位制:用0和1來表示的數。

3、資料結構:儲存和組織資料的方式。

我們可以這樣形象理解bloomfiler,它是一段位列,位列上每一位以0或1表示著bloomfiler組織資料的意義。

而bloomfiler組織資料是將資料通過k個雜湊函式分別對映到位列上,並將位列相應位置的位值賦值為1。位值為1的意義是表示資料在bloomfiler中存在。

如圖:1、位列,開始沒有資料

2、將資料a雜湊函式分別對映到位列上,並將位列相應位置的位賦值為1。

3、將資料b雜湊函式分別對映到位列上,並將位列相應位置的位賦值為1。

查詢乙個資料是否存在於bloomfiler中,即將資料通過k個雜湊函式分別對映到位列上,看位列相應的位置上的位值是否都為1,

如果都為1,則說明存在;如果不都為1,則說明不存在。

由於雜湊存在衝突,存在的情況下,有一定的誤識別率。即乙個數本來不存在於bloomfiler中,而被告訴存在。

二、**實現

static uint32_t bloomhash(const slice& key) // 雜湊函式

class bloomfilterpolicy : public filterpolicy

virtual const char* name() const

// n:key的個數;dst:存放過濾器處理的結果

virtual void createfilter(const slice* keys, int n, std::string* dst) const}}

virtual bool keymaymatch(const slice& key, const slice& bloom_filter) const

uint32_t h = bloomhash(key);

const uint32_t delta = (h >> 17) | (h << 15); // rotate right 17 bits

for (size_t j = 0; j < k; j++)

return true;}};

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...