一種基于Bloom Filter的鍵值對存儲結構及方法
【技術領域】
[0001] 本發(fā)明涉及計算機網(wǎng)絡領域和計算機系統(tǒng)存儲領域,特別是特別是高性能、高吞 吐量的交互查詢的應用領域,具體是一種基于Bloom Filter的鍵值對存儲結構及方法。
【背景技術】
[0002] 近年來,隨著計算機的飛速發(fā)展,數(shù)據(jù)庫,網(wǎng)絡和其他應用中的集合規(guī)模呈幾何增 長。存儲和查詢鍵值(key,Value)對是計算機系統(tǒng)中常見的任務,這就需要設計對應的鍵值 對存儲數(shù)據(jù)結構支持快速的鍵值對查詢。鍵值對操作經(jīng)常出現(xiàn)在網(wǎng)絡和存儲系統(tǒng)中,如 key-value數(shù)據(jù)庫MongoDB,CouchDB。每個放入到鍵值對存儲系統(tǒng)中的唯一鍵(key)都對應 一個value,例如(3,5)是一個鍵key為3,值value為5的鍵值對,將(3,5)存儲到鍵值對存儲 系統(tǒng)后,可以通過查詢鍵(key)為3,得到值(value)為5。
[0003] 鍵值對操作通常包含下面四種操作:1、Query(key):對于指定鍵(key),查找對應 的值(value) JUnseri^key,value):將(key,value)鍵值對存入對應的鍵值對存儲系統(tǒng) 中。3、〇616七6(1^7,¥31116) :在對應的鍵值對存儲系統(tǒng)中刪除對應的鍵值對(1^7,¥31116)。4、 Update(key,newValue):將key對應的鍵值由 value改為newValue。
[0004] 設計一個高效的鍵值對存儲結構帶來了很大挑戰(zhàn)。如,在傳統(tǒng)計算機網(wǎng)絡中,使用 〈源IP,目的IP,源端口,目的端口,協(xié)議號〉一共104比特的5元組來標識一條流,每一條TCP 流都會有對應的狀態(tài),如果將流的5元組作為鍵值對的key,將TCP流對應的狀態(tài)作為value 組成鍵值對(key,value)。如果采用線性結構進行網(wǎng)絡流狀態(tài)存儲,并且直接將(key和 value)作為元組直接存入。存儲key(對應104個bit)需要大量的空間,而且在查找對應key 的value的時候會消耗大量的時間,因此在高速計算機網(wǎng)絡中,如何高效的存儲這些信息, 快速的查詢對應流(key)的狀態(tài)(value)成為挑戰(zhàn)。
[0005] Bloom Filter是一種能夠表示集合、支持集合查詢的簡潔數(shù)據(jù)結構,它能夠有效 的表示數(shù)據(jù)集合。Bloom Filter結構實質是將集合中元素通過k個哈希函數(shù)映射到位向量 中。Bloom Filter在達到其高效表示集合的同時,進行元素查詢時卻存在一定的假陽性錯 誤,而不存在假陰性錯誤。雖然Bloom Filter結構在元素查詢時存在少量錯誤,但是由于它 對存儲空間的高效性,使得該數(shù)據(jù)結構自1970年由B. Bloom提出以來得到了比較廣泛的應 用。
[0000]但是傳統(tǒng)的Bloom Filter僅僅只能支持元素是否存在與否的從屬查詢。如果元素 為key,那么只能支持key存在與否的從屬查詢,而無法支持(key,value)操作。因為bloom f i 1 ter無法直接存儲value,因此并不能支持鍵值對的上述四種操作。要使得Bloom Fi Iter 支持鍵值對的基本操作,必須要改進傳統(tǒng)的Bloom Filter,設計新的Bloom filter結構,使 得Bloom Filter能夠支持鍵值對的基本操作。
【發(fā)明內(nèi)容】
[0007]本發(fā)明所要解決的技術問題是,針對現(xiàn)有技術不足,提供一種基于Bloom Filter 的鍵值對存儲結構及方法,大大減少集合查詢的時間,降低資源消耗。
[0008]為解決上述技術問題,本發(fā)明所采用的技術方案是:一種基于Bloom Filter的鍵 值對存儲結構,包括k個不相同的哈希函數(shù)和m個用于存儲value的存儲單元(哈希函數(shù)用來 映射到存儲單元中的位置);所述m個存儲單元被分配成k個不同的塊,每個塊有m/k個單元; 每一個單元帶有L層,每一層有B個比特位(后文中簡稱為statusbf)。
[0009] 本發(fā)明還提供了一種利用上述結構實現(xiàn)鍵值對操作的方法,包括步驟:
[0010] 1)當要插入一個鍵值對(key, value)時,將value進行編碼,編碼后表示為 V0V1V2……Vb-1;其中Vi表示編碼后的第i位,0 < i <B;接著對key使用k個哈希函數(shù)hih〗…… 111<,確定1^個不同的位置11()(1^7)111(1^7)......hk-i(key),然后對這k個不同位置的單元進行加 操作,將value值插入;對于每個單元的第一個位Cf,將輸入的value編碼后對應的比特位Vj 作為對應位的輸入,〇<j<B;對于其它層Cf - 一 Cf,使用該層的上一層g…的 進位位作為該層的輸入,每一層的每一個位Cf:最終結果等于當前層每一個位C|的本位和;
[0011] 2 )當要刪除一個鍵值對(key,value )時,將value進行編碼,編碼后表示為 V0V1V2……Vb-1;其中Vi表示編碼后的第i位,0 < i <B;接著對key使用k個哈希函數(shù)hih〗…… hk,確定k個不同的位置ho (key )hi (key)......hk-i (key),然后對這k個不同位置的單元進行減 操作,將value值刪除;對于每個單元的第一個位Cf,將輸入的value編碼后對應的比特位Vj 作為對應位的輸入,〇 < j<B;對于其它層Cf 使用該層的上一層的 進位位作為該層的輸入,每一層的每一個位最終結果等于當前層每一個位C|的本位差;
[0012] 3)要查詢一個鍵值key時,對k個不同位置ho (key )hi( key)......hk-i(key)的單元進 行查詢操作,對于k個位置的每個單元,對每一個位Si的每一層進行或操作,即
然后通過所有位得到第k個單元查詢結果1'1 = &&…… i<k;最終查詢結果Q等于每個單位的與操作,即QiTiAL……ΛΤκ;
[0013] 4)要將一個鍵值為key更新為newValue時,首先查詢鍵值為key的value,然后重復 步驟2),刪除(key,newValue),最后重復步驟1),插入(key,newValue) 〇
[0014] 與現(xiàn)有技術相比,本發(fā)明所具有的有益效果為:本發(fā)明在數(shù)據(jù)庫交互查詢、高速網(wǎng) 絡中資源定位、計算機網(wǎng)絡監(jiān)控等產(chǎn)生大量數(shù)據(jù)、需要進行鍵值對查詢的應用領域,可以大 大減少集合查詢的時間,降低資源消耗。
【附圖說明】
[0015]圖1是改進的鍵值對Bloom Filter結構,其中m表示所有單元的個數(shù),k表示哈希函 數(shù)的個數(shù),L表示每個單元的層數(shù),B表示數(shù)據(jù)的位數(shù)。
[0016]圖2是插入操作示意圖。
:表示的是第i個塊,第j個單元的第P層在進行 插入前的值,
表示的是第i個塊,第j個單元的第P層在進行插入后的值,
:表示的是第i個塊,第j個單元的第P層的進位位。對于每一層,類似于加法器我們 有:
[0019]圖3是刪除操作示意圖(
表示的是第i個塊,第j個單元的第P層在進行 刪除前的值,
:表示的是第i個塊,第j個單元的第P層在進行刪除后的值,
:表示的是第i個塊,第j個單元的第P層的借位位。對于每一層,類似于減法器我們 有:
[0022] 圖4(a)、圖4(b)、圖4(c)是插入操作示意圖,分別插入鍵值對(fl,0001),(f2, 0010),(f3,0001),圖4(d)、圖4(f)是查詢操作示意圖,分別查詢鍵值為Π ,f3的值,圖4(e) 是刪除操作示意圖刪除(Π ,〇〇〇1)。
[0023] 圖5實施環(huán)境數(shù)據(jù)詳細信息,包含數(shù)據(jù)來源,數(shù)據(jù)時間,包大小,最大并發(fā)流個數(shù), 本實施例與最近幾年研究成果進行了對比,其中包括,sBF是2006年sigcomm中的論文" Beyond Bloom Filters:From Approximate Membership Checks to Approximate State Machines"提出的一種基于Bloom Filter的鍵值對查詢算法,該算法在Bloom Filter的基 礎上將單元保存著數(shù)值,和計數(shù)器,如果有不同的值映射到相同的位置,就把存有不同值位 置的值置為未知;kBF是2014年infocom中的論文"kBF:a Bloom Filter for Key-Value Storage with an Application on Approximate State Machines"提出的一種基于Bloom Filter的鍵值對查詢算法,該算法將value值進行編碼后,對每一個映射到的單元進行異 或,最后查詢時將所有映射到的單元進行整體解碼。
[0024] 圖6(a)~圖6(d)是固定Bloom Filter的長度m,在不同哈希函數(shù)個數(shù)下,使用三種 不同算法stateBF與sBF和kBF,對于數(shù)據(jù)集1、2、3、4在假陽性誤判率性能上的比較(假陽性 是指查詢的鍵key不存在于集合內(nèi),但查詢結果顯示鍵key存在,并且有對應的值value)。數(shù) 據(jù)結果顯示在所有的數(shù)據(jù)集下,我們所提出的算法stateBF的假陽性最小。其中在第一個數(shù) 據(jù)集和第二個數(shù)據(jù)集下,由于第一個數(shù)據(jù)集和第二個數(shù)據(jù)集是日本和美國之間的流量數(shù)據(jù) 集,因此TCP連接狀態(tài)變化的很快,因此在相同位置映射不同的值使得這個位置變成未知的 sbf算法的誤判率就會很高,而在第三個和第四個數(shù)據(jù)集的情況下,是學校出口鏈路流量數(shù) 據(jù)集,TCP連接狀態(tài)變化相對較少,在相同位置如果映射同一種value值就會無法解碼的kbf 算法的誤判率就會相對較高。
[0025]圖7(a)~圖7(d)是固定Bloom Filter的長度m,在不同哈希函數(shù)個數(shù)下,使用三種 不同算法stateBF與sBF和kBF,對于數(shù)據(jù)集1、2、3、4在假陰性誤判率性能上的比較(假陰性 是指查詢的鍵key真實存在于集合內(nèi),但使用算法查詢鍵key得到對應的值value與真實的 值value不相同)。數(shù)據(jù)結果顯示在所有的數(shù)據(jù)集下,我們所提出的算法stateBF的假陰性最 小。同理,第一個數(shù)據(jù)集和第二個數(shù)據(jù)集是日本和美國之