1, slice.h中slice是leveldb內部使用的字串類,**很簡單
2, leveldb 儲存編碼
對於位元組儲存分大端小端位元組序還是小端小端位元組序
leveldb使用的是小端位元組序儲存,低位位元組排放在記憶體的低位址端,高位位元組排放在記憶體的高位址端。
編碼分為變長的varint和固定大小fixedint兩種,每種分32位和64位。
固定大小的fixedint32和fixedint64的編碼 檔案coding.cc
不定大小的varint編碼
int32型別的數字,一般需要4個byte來表示,int64型別的數字,一般需要8個byte來表示;
varint是一種緊湊的表示數字的方法。它用乙個或多個位元組來表示乙個數字,值越小的數字使用越少的位元組數。數值小的用乙個位元組就可以儲存。
3, atomicpointer 是 leveldb 提供的乙個原子指標操作類,使用了基於原子操作(atomic operation)或者記憶體屏障(memory barrier)的同步訪問機制,這比用鎖和訊號量的效率要高
4, 現在我們來看看leveldb裡隨機數random類是如何實現的:
在random類中,a為16807,m為2147483647,c為0;
uint32_t hash(const char* data, size_t n, uint32_t seed)
// pick up remaining bytes
switch (limit - data)
return h;
}
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...