日誌結構的key value儲存系統Bitcask

2021-09-25 20:45:57 字數 1286 閱讀 2606

bitcask

來自於riak,是乙個日誌(log-structured)儲存系統。用在riak的分布式資料庫的底層key/value的儲存。

bitcask的一些基本特徵:

1.  

key/value

2.  

通過hash表儲存key與其物理儲存位置的對應關係(索引),讀取操作的時間複雜度為0(1);可通過對索引進行持久化以減少重啟時重建索引的時間。

3.  

當系統執行一段時間後,可進行merge操作將相同的key進行合併以騰出空間。

4.  

寫操作只需一次磁碟尋道;讀操作先查詢索引,獲取key所對應的value的位置與大小,然後讀取value的資料,需要兩次磁碟尋道;因此讀寫的效率都相當高。

bitcask的資料儲存

在bitcask中,每一對key/value都以如下圖所示的結構進行儲存,其中crc是資料體的校檢碼,tstamp為時間戳,ksz是key的長度,valuesz是value的長度,最後緊接著是key和value。

key/value

按照上面的格式一條一條進行儲存,

當有key/value加入時,bitcask將其直接追加到資料檔案的末尾,即使對應的key已經存在於資料檔案中,這樣就可能造成bitcask儲存乙個key對應的多個版本,為了節省儲存空間,bitcask會定期的進行merge操作,對同乙個key上的多個操作進行合併,每次merge後,資料檔案中將不會有冗餘資料了。

基於hash表的索引資料

日誌型別的資料檔案會讓寫入操作非常快(日誌型的優勢之一是將磁碟當作磁帶,進行順序讀寫的效率非常高),而如果在這樣的日誌型資料上進行key值查詢,效率將非常的低,bitcask在記憶體中使用hash表建立key與其儲存位置的索引,從而使得讀操作能高效的完成。hash表的每個條目如下所示,主要儲存了key所對應value的大小和偏移位置。

hint file加速索引重建

bitcask

的索引儲存在記憶體中,

如果我們不做額外的工作,那麼系統啟動時重建hash表時,就需要整個掃瞄一遍資料檔案,如果資料檔案很大,這將是乙個非常耗時的過程。bitcask模型中包含了乙個稱作hint file的部分,目的在於提高重建hash表的速度。

每個key/value對與hint file的乙個條目對應,該條目主要儲存了key與value大小及位置的對應關係,hint file會被持久化到硬碟上,每次系統啟動時,只需要順序讀取hint file便可快速的構造hash索引表。

構建key value儲存引擎 資料組織

key value儲存引擎資料組織方式 1.slab方式儲存 把檔案劃分多個等級的塊大小 通常以2的次冪方式劃分,如 256byte,512byte,1024byte.value資料選擇儲存在 最適合 的塊中。這種資料組織方式在記憶體型服務中也經常使用,如memcached。優點 塊的 利用較容易,...

讀取以key value形式儲存的txt檔案

片段 假設只有3個key value public static void main string args throws ioexception key str.substring 0,str.indexof value str.substring str.indexof 1,str.length...

高效能檔案快取key value儲存 Redis

a.redis是乙個開源,先進的key value 鍵 值對 儲存,並且勇於構建高效能,可擴充套件的web應用程式的完美解決方案 b.redis和memcached的對比 b.1 redis資料庫完全在記憶體中,使用磁碟僅用於永續性 b.2 相比較許多鍵值對儲存,redis擁有更加豐富的資料型別,r...