Leveldb原始碼分析3 Cache

2021-07-07 01:56:21 字數 511 閱讀 2524

leveldb 實現了乙個lrucache。和標準的lrucache一樣沒有什麼特別之處。

lrucache內部有乙個hash表用於快速查詢key對應的雙向鍊錶,雙向鍊錶中記錄了value的值。

利用雙線鍊錶實現lrucache的演算法在《作業系統》中描述的很清楚,這裡不再描述。

hashtable不是c++標準庫的一部分,出於**移植的考慮,leveldb自己實現了乙個雜湊表(handletable),通過測試發下這個handletable比g++4.4.3自帶的hashtable快5%(這個比較厲害)

lrucache是執行緒安全的。

為了多執行緒訪問,盡可能快速,減少鎖開銷,shardedlrucache內部有16個lrucache,lrucache shard_[knumshards], 查詢key時首先計算key屬於哪乙個分片(shard_[shard(hash)]),分片的計算方法是取32位hash值的高4位。然後在相應的shard_[shard[hash)]上進行查詢。

這樣就大大減少了多執行緒的鎖開銷。

leveldb原始碼分析1

leveldb是乙個key value型的儲存引擎,由google開發,並宣布在bsd許可下開放源 plain git clone plain cd leveldb make all 此時生成libleveldb.a庫檔案。拷貝leveldb的標頭檔案到 usr include下 plain cp ...

levelDB原始碼分析 SSTable

sstable是bigtable中至關重要的一塊,對於leveldb來說也是如此,對leveldb的sstable實現細節的了解也有助於了解bigtable中一些實現細節。本節內容主要講述sstable的靜態布局結構,sstable檔案形成了不同level的層級結構,至於這個層級結構是如何形成的我們...

Leveldb原始碼分析 1

前言 看了一點oceanbase,沒有意志力繼續堅持下去了,暫時就此中斷,基本上算把master看完了,比較重要的update server和merge server 卻沒有細看。中間又陸續研究了hadoop的原始碼,主要是name node和寫入pipeline。主要的目的是想看看name nod...