log format-levelDB源碼解析

基本概念:

邏輯記錄:用戶輸入的key value,進行包裝後,可以形成一條記錄,我們把它稱爲邏輯記錄;

物理記錄:一條或多條物理記錄組成一個邏輯記錄。

block:一條邏輯記錄,包含了一個或多個block,kBlockSize = 32768;即每個block的大小爲32K;當然一個block裏面也可以有多個record;


關係示意圖:

一個邏輯記錄由一個或多個block組成的情況




一個block包含多個邏輯記錄的情況





RecordType:

    kFullType    代表這個記錄,整個都在block中;

    kFirstType   代表一條記錄,至少需要2個block,而當前block包含了該記錄的第一片信息;

    kMiddleType  代表一條記錄,至少需要3個block,而當前block包含了該記錄的中間的信息;

    kLastType    代表一條記錄,至少需要2個block,而當前block包含了該記錄的最後一片的信息;

block的結構:            


如上圖爲block的結構,它由多個(header+data)組成;

header:checksum + length + type

checksum:4個字節的crc數據校驗碼,小端保存;根據type和data生成的crc校驗碼;

length:data的數據長度,2個字節,因爲block是32K,所以2字節足夠了,小端保存;

type:就是上面講的RecordType了;


幾個值得說明的地方:

1、block包含一個或多個(header+data);

2、開始一條新紀錄,當一個block只剩下小於等於6個字節的時候,用\x00填充;

3、開始一條新紀錄,當一個block只剩下超過6個字節的時候,可以重新開始一個header,所以有可能沒有data(當只剩7個字節的時候);

4、每個block的開頭一定是header

5、邏輯記錄=一個或多個(header+data),其中data有可能爲空

6、物理記錄就是header+data,,其中data有可能爲空

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章