基本概念:
邏輯記錄:用戶輸入的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有可能爲空