WriteBatch - KV存儲(chǔ)-LevelDB/RocksDB源碼剖析和中文注釋

通過(guò)Batch Write來(lái)實(shí)現(xiàn)Concurrent Write


Overview

Put與Delete操作

Status DB::Put(constWriteOptions& opt,constSlice& key,constSlice&value) {

WriteBatch batch;

batch.Put(key,value);returnWrite(opt, &batch);

}

Status DB::Delete(constWriteOptions& opt,constSlice& key) {

WriteBatch batch;

batch.Delete(key);returnWrite(opt, &batch);

}

LevelDB對(duì)外暴露的寫(xiě)接口包括Put,Delete和Write,其中Write需要WriteBatch作為參數(shù),而Put和Delete首先就是將當(dāng)前的操作封裝到一個(gè)WriteBatch對(duì)象,并調(diào)用Write接口。

opt是寫(xiě)選項(xiàng),從上面代碼并沒(méi)有看出處理并發(fā)的邏輯,其實(shí)對(duì)于多線程的處理是在DBImpl::Write函數(shù)中完成

WriteBatch

每一個(gè)WriteBatch都是以一個(gè)固定長(zhǎng)度的頭部開(kāi)始,然后后面接著許多連續(xù)的記錄(插入或刪除操作)

固定頭部格式:

固定頭部共12字節(jié),其中前8字節(jié)為WriteBatch的序列號(hào)(也就是每個(gè)操作對(duì)應(yīng)的全局序列號(hào)),對(duì)應(yīng)rep_[0]到rep_[7],每次處理Batch中的記錄時(shí)才會(huì)更新,后四字節(jié)為當(dāng)前Batch中的記錄數(shù),對(duì)應(yīng)rep_[8]到rep_[11];

后面的記錄結(jié)構(gòu)為:

插入數(shù)據(jù)時(shí):type(kTypeValue、kTypeDeletion),Key_size,Key,Value_size,Value

刪除數(shù)據(jù)時(shí):type(kTypeValue、kTypeDeletion),Key_size,Key

WriteBatchInternal提供了一系列的靜態(tài)操作接口來(lái)對(duì)WriteBatch的接口進(jìn)行封裝,而不是直接操作WriteBatch的接口。

Design


Writer封裝WriteBatch

/*struct DBImpl::Writer {

*? WriteBatch* batch;

*? bool sync;

*? bool done;//該batch是否完成的標(biāo)志done

* port::CondVar cv;//信號(hào)量cv用于多線程的同步

*};

*

*/

Source Code Chinese Comments

https://github.com/cld378632668/leveldb_chinese_comments

Referrence

http://blog.csdn.net/weixin_36145588/article/details/78133260

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • # rocksdb engine 寫(xiě)邏輯 ## 執(zhí)行路徑 DB::Put(key, value)是一個(gè)寫(xiě)操作簡(jiǎn)單封...
    kenry閱讀 2,685評(píng)論 0 1
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,853評(píng)論 18 399
  • 前面已經(jīng)寫(xiě)了幾篇文章介紹一些和 LevelDB 相關(guān)的內(nèi)容: LSM 簡(jiǎn)介 LevelDB:整體架構(gòu) LevelD...
    linjinhe閱讀 2,576評(píng)論 0 3
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,442評(píng)論 0 2

友情鏈接更多精彩內(nèi)容