leveldb 原始碼導讀

2021-10-02 19:35:34 字數 767 閱讀 8530

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...