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

通過Batch Write來實(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對外暴露的寫接口包括Put箱季,Delete和Write没炒,其中Write需要WriteBatch作為參數(shù),而Put和Delete首先就是將當(dāng)前的操作封裝到一個(gè)WriteBatch對象妥曲,并調(diào)用Write接口。

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

WriteBatch

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

固定頭部格式:

固定頭部共12字節(jié)沥割,其中前8字節(jié)為WriteBatch的序列號(hào)(也就是每個(gè)操作對應(yīng)的全局序列號(hào))耗啦,對應(yīng)rep_[0]到rep_[7],每次處理Batch中的記錄時(shí)才會(huì)更新机杜,后四字節(jié)為當(dāng)前Batch中的記錄數(shù)帜讲,對應(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)操作接口來對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)容合作請聯(lián)系作者
  • 序言:七十年代末块饺,一起剝皮案震驚了整個(gè)濱河市赞辩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌授艰,老刑警劉巖辨嗽,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異淮腾,居然都是意外死亡召庞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門来破,熙熙樓的掌柜王于貴愁眉苦臉地迎上來篮灼,“玉大人,你說我怎么就攤上這事徘禁∽缬眨” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵送朱,是天一觀的道長娘荡。 經(jīng)常有香客問我,道長驶沼,這世上最難降的妖魔是什么炮沐? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮回怜,結(jié)果婚禮上大年,老公的妹妹穿的比我還像新娘。我一直安慰自己玉雾,他們只是感情好翔试,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著复旬,像睡著了一般垦缅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驹碍,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天壁涎,我揣著相機(jī)與錄音,去河邊找鬼志秃。 笑死怔球,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洽损。 我是一名探鬼主播庞溜,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼革半,長吁一口氣:“原來是場噩夢啊……” “哼碑定!你這毒婦竟也來了流码?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤延刘,失蹤者是張志新(化名)和其女友劉穎漫试,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碘赖,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驾荣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了普泡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片播掷。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撼班,靈堂內(nèi)的尸體忽然破棺而出歧匈,到底是詐尸還是另有隱情,我是刑警寧澤砰嘁,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布件炉,位于F島的核電站,受9級(jí)特大地震影響矮湘,放射性物質(zhì)發(fā)生泄漏斟冕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一缅阳、第九天 我趴在偏房一處隱蔽的房頂上張望磕蛇。 院中可真熱鬧,春花似錦十办、人聲如沸孤里。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捌袜。三九已至,卻和暖如春炸枣,著一層夾襖步出監(jiān)牢的瞬間虏等,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工适肠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霍衫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓侯养,卻偏偏與公主長得像敦跌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

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