RocksDB系列十五:How we keep track of live SST files

??RocksDB內(nèi)部有WAL log文件偷线,此外栋烤,LSM tree還包含了一些SST files酿愧。每經(jīng)過一次compaction游岳,產(chǎn)出的新文件都會添加到SST files中政敢,而輸入的SST file會被刪除。然而胚迫,compaction輸入的SST file并不是立即就從SST file集合中刪除喷户,因為有可能在這些SST file上正進行著get or iterator操作。只有當冗余的SST file上沒有任何操作的時候访锻,才會執(zhí)行真正的刪除文件操作褪尝。接下來,我們會詳細介紹怎么跟進SST file上的讀寫等操作信息期犬。
??LSM tree的文件信息保存在一個命名為version的數(shù)據(jù)結(jié)構(gòu)中河哑。當compaction or memtable flush結(jié)束后,SST file就會更新龟虎,此時璃谨,RocksDB就會為最新的LSM tree創(chuàng)建一個新的version來記錄SST file信息。在某一個時刻鲤妥,只會有一個“current” version數(shù)據(jù)結(jié)構(gòu)來記錄最新LSM tree的文件信息佳吞。get or iterator操作會使用這個version記錄的文件來執(zhí)行完get or iterator的過程。在get or iterator執(zhí)行過程中涉及到的所有SST file都必須保留棉安。如果一個version上沒有任何get or iterator操作底扳,那么這個version就會被drop掉,所有沒有任何version記錄的SST files也都會被刪除掉垂券。
??剛開始時version記錄了三個文件:

v1={f1, f2, f3} (current)
files on disk: f1, f2, f3

??這時一個iterator操作使用了v1

v1={f1, f2, f3} (current, used by iterator1)
files on disk: f1, f2, f3

??此時花盐,發(fā)生了memtable flush,創(chuàng)建了一個新的version和 file 4

v2={f1, f2, f3, f4} (current)
v1={f1, f2, f3} (used by iterator1)
files on disk: f1, f2, f3, f4

??執(zhí)行了compaction操作,將f2 菇爪、f3算芯、f4 compaction為 f5,產(chǎn)生最新的version3

v3={f1, f5} (current)
v2={f1, f2, f3, f4}
v1={f1, f2, f3} (used by iterator1)
files on disk: f1, f2, f3, f4, f5

??我們可以看到凳宙,v2既不是最新的version熙揍,也沒有任何讀操作使用,所以v2以及f4將被刪除氏涩。f1届囚、f2、f3在v1中是尖,v1仍然被iterator1使用意系,所以無法刪除。

v3={f1, f5} (current)
v1={f1, f2, f3} (used by iterator1)
files on disk: f1, f2, f3, f5

??加入此時饺汹,iterator1結(jié)束了蛔添,則最新狀態(tài)為

v3={f1, f5} (current)
v1={f1, f2, f3}
files on disk: f1, f2, f3, f5

??此時,v1既不是最新的version,也沒有被任何操作引用迎瞧,所以即將被刪除夸溶,f2和f3也隨之刪除

v3={f1, f5} (current)
files on disk: f1, f5

??這些邏輯是通過引用計數(shù)來實現(xiàn)的。每個SST file和version都有一個引用計數(shù)凶硅。當創(chuàng)建一個version時缝裁,會遞增所有引用的SST file的引用計數(shù)。當一個version沒有被使用時足绅,它所包含的所有SST file的引用計數(shù)丟會遞減1捷绑。如果一個文件的引用計數(shù)為0,那么就可以被刪除了编检。
??類似胎食,每個version也都有一個引用計數(shù)扰才。當創(chuàng)建一個version時允懂,那這個version就是最新的version,引用計數(shù)遞增1衩匣。如果一個version不再是最新的version時蕾总,其引用計數(shù)會遞減1。在一個version上執(zhí)行的任何操作都會將其引用計數(shù)遞增1琅捏,這些操作計數(shù)后會將其引用計數(shù)遞減1生百。當一個version的引用計數(shù)為0時,那么這個version就要被刪除掉柄延。如果一個version上有操作在執(zhí)行或者是最新的version蚀浆,那么他的引用計數(shù)就永遠不會是0,也無法被刪除搜吧。
??有時候市俊,reader操作戶直接引用一個version,比如執(zhí)行compaction操作時的輸入version滤奈。更多情況下摆昧,reader是通過一個命名為super version的數(shù)據(jù)結(jié)構(gòu)來引用version,這個super version會記錄memtables和version的引用計數(shù)蜒程,super version其實就是a whole view of the DB绅你。在使用super version來操作version的引用計數(shù)時,reader只需要對一個引用計數(shù)執(zhí)行遞增和遞減操作就可以了昭躺。
??RocksDB的所有version信息記錄在VersionSet中忌锯,這個數(shù)據(jù)結(jié)構(gòu)也同時記錄了哪個version是當前version。由于每個column family都有一個單獨的LSM樹领炫,所以每個column family都有一個version list(其中一個是當前version)偶垮。不過,每個DB中僅且只有一個VersionSet來記錄所有column family的version s信息。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末针史,一起剝皮案震驚了整個濱河市晶伦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啄枕,老刑警劉巖婚陪,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異频祝,居然都是意外死亡泌参,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門常空,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沽一,“玉大人,你說我怎么就攤上這事漓糙∠巢” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵昆禽,是天一觀的道長蝗蛙。 經(jīng)常有香客問我,道長醉鳖,這世上最難降的妖魔是什么捡硅? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮盗棵,結(jié)果婚禮上壮韭,老公的妹妹穿的比我還像新娘。我一直安慰自己纹因,他們只是感情好喷屋,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辐怕,像睡著了一般逼蒙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寄疏,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天是牢,我揣著相機與錄音,去河邊找鬼陕截。 笑死驳棱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的农曲。 我是一名探鬼主播社搅,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼驻债,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了形葬?” 一聲冷哼從身側(cè)響起合呐,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笙以,沒想到半個月后淌实,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡猖腕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年拆祈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倘感。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡放坏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出老玛,到底是詐尸還是另有隱情淤年,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布逻炊,位于F島的核電站互亮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏余素。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一炊昆、第九天 我趴在偏房一處隱蔽的房頂上張望桨吊。 院中可真熱鬧,春花似錦凤巨、人聲如沸视乐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽佑淀。三九已至,卻和暖如春彰檬,著一層夾襖步出監(jiān)牢的瞬間伸刃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工逢倍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捧颅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓较雕,卻偏偏與公主長得像碉哑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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

  • 版本控制或元信息管理扣典,是LevelDB中比較重要的內(nèi)容妆毕。本文首先介紹其在整個LevelDB中不可替代的作用;之后從...
    CatKang閱讀 5,459評論 12 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贮尖,服務(wù)發(fā)現(xiàn)设塔,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • 第二次見面远舅,灰色
    停留在過去的未來閱讀 284評論 0 0
  • . happy . excited . delighted . ecstatic: i'staeti
    享悅moonlight閱讀 294評論 0 0
  • 我們對人事物的反應(yīng)闰蛔,做或者不做某些事,內(nèi)心的推動力的原動力都來自于我們內(nèi)心有一套信念系統(tǒng)图柏,所以我們說“信念是行為的...
    琴素親子閱讀 372評論 2 7