最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

LevelDB系列之Log文件

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 10:23:34
文檔

LevelDB系列之Log文件

LevelDB系列之Log文件:上節(jié)內(nèi)容講到log文件在LevelDb中的主要作用是系統(tǒng)故障恢復(fù)時(shí),能夠保證不會(huì)丟失數(shù)據(jù)。因?yàn)樵趯⒂涗泴懭雰?nèi)存的Memtable之前,會(huì)先寫入Log文件,這樣即使系統(tǒng)發(fā)生故障,Memtable中的數(shù)據(jù)沒有來得及Dump到磁盤的SSTable文件,LevelDB也可以根據(jù)log文件
推薦度:
導(dǎo)讀LevelDB系列之Log文件:上節(jié)內(nèi)容講到log文件在LevelDb中的主要作用是系統(tǒng)故障恢復(fù)時(shí),能夠保證不會(huì)丟失數(shù)據(jù)。因?yàn)樵趯⒂涗泴懭雰?nèi)存的Memtable之前,會(huì)先寫入Log文件,這樣即使系統(tǒng)發(fā)生故障,Memtable中的數(shù)據(jù)沒有來得及Dump到磁盤的SSTable文件,LevelDB也可以根據(jù)log文件

上節(jié)內(nèi)容講到log文件在LevelDb中的主要作用是系統(tǒng)故障恢復(fù)時(shí),能夠保證不會(huì)丟失數(shù)據(jù)。因?yàn)樵趯⒂涗泴懭雰?nèi)存的Memtable之前,會(huì)先寫入Log文件,這樣即使系統(tǒng)發(fā)生故障,Memtable中的數(shù)據(jù)沒有來得及Dump到磁盤的SSTable文件,LevelDB也可以根據(jù)log文件恢復(fù)內(nèi)存

上節(jié)內(nèi)容講到log文件在LevelDb中的主要作用是系統(tǒng)故障恢復(fù)時(shí),能夠保證不會(huì)丟失數(shù)據(jù)。因?yàn)樵趯⒂涗泴懭雰?nèi)存的Memtable之前,會(huì)先寫入Log文件,這樣即使系統(tǒng)發(fā)生故障,Memtable中的數(shù)據(jù)沒有來得及Dump到磁盤的SSTable文件,LevelDB也可以根據(jù)log文件恢復(fù)內(nèi)存的Memtable數(shù)據(jù)結(jié)構(gòu)內(nèi)容,不會(huì)造成系統(tǒng)丟失數(shù)據(jù),在這點(diǎn)上LevelDb和Bigtable是一致的。

下面我們帶大家看看log文件的具體物理和邏輯布局是怎樣的,LevelDb對(duì)于一個(gè)log文件,會(huì)把它切割成以32K為單位的物理Block,每次讀取的單位以一個(gè)Block作為基本讀取單位,下圖展示的log文件由3個(gè)Block構(gòu)成,所以從物理布局來講,一個(gè)log文件就是由連續(xù)的32K大小Block構(gòu)成的。

wps_clip_image-28147

圖3.1log文件布局

在應(yīng)用的視野里是看不到這些Block的,應(yīng)用看到的是一系列的Key:Value對(duì),在LevelDb內(nèi)部,會(huì)將一個(gè)Key:Value對(duì)看做一條記錄的數(shù)據(jù),另外在這個(gè)數(shù)據(jù)前增加一個(gè)記錄頭,用來記載一些管理信息,以方便內(nèi)部處理,圖3.2顯示了一個(gè)記錄在LevelDb內(nèi)部是如何表示的。

wps_clip_image-11582

圖3.2記錄結(jié)構(gòu)

記錄頭包含三個(gè)字段,ChechSum是對(duì)“類型”和“數(shù)據(jù)”字段的校驗(yàn)碼,為了避免處理不完整或者是被破壞的數(shù)據(jù),當(dāng)LevelDb讀取記錄數(shù)據(jù)時(shí)候會(huì)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),如果發(fā)現(xiàn)和存儲(chǔ)的CheckSum相同,說明數(shù)據(jù)完整無破壞,可以繼續(xù)后續(xù)流程。“記錄長度”記載了數(shù)據(jù)的大小,“數(shù)據(jù)”則是上面講的Key:Value數(shù)值對(duì),“類型”字段則指出了每條記錄的邏輯結(jié)構(gòu)和log文件物理分塊結(jié)構(gòu)之間的關(guān)系,具體而言,主要有以下四種類型:FULL/FIRST/MIDDLE/LAST。

如果記錄類型是FULL,代表了當(dāng)前記錄內(nèi)容完整地存儲(chǔ)在一個(gè)物理Block里,沒有被不同的物理Block切割開;如果記錄被相鄰的物理Block切割開,則類型會(huì)是其他三種類型中的一種。我們以圖3.1所示的例子來具體說明。

假設(shè)目前存在三條記錄,Record A,Record B和Record C,其中Record A大小為10K,Record B 大小為80K,Record C大小為12K,那么其在log文件中的邏輯布局會(huì)如圖3.1所示。Record A是圖中藍(lán)色區(qū)域所示,因?yàn)榇笮?0K<32K,能夠放在一個(gè)物理Block中,所以其類型為FULL;Record B 大小為80K,而Block 1因?yàn)榉湃肓薘ecord A,所以還剩下22K,不足以放下Record B,所以在Block 1的剩余部分放入Record B的開頭一部分,類型標(biāo)識(shí)為FIRST,,代表了是一個(gè)記錄的起始部分;Record B還有58K沒有存儲(chǔ),這些只能依次放在后續(xù)的物理Block里面,因?yàn)锽lock 2大小只有32K,仍然放不下Record B的剩余部分,所以Block 2全部用來放Record B,且標(biāo)識(shí)類型為MIDDLE,意思是這是Record B中間一段數(shù)據(jù);Record B剩下的部分可以完全放在Block 3中,類型標(biāo)識(shí)為LAST,代表了這是Record B的末尾數(shù)據(jù);圖中黃色的Record C因?yàn)榇笮?2K,Block 3剩下的空間足以全部放下它,所以其類型標(biāo)識(shí)為FULL。

從這個(gè)小例子可以看出邏輯記錄和物理Block之間的關(guān)系,LevelDb一次物理讀取為一個(gè)Block,然后根據(jù)類型情況拼接出邏輯記錄,供后續(xù)流程處理。

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

LevelDB系列之Log文件

LevelDB系列之Log文件:上節(jié)內(nèi)容講到log文件在LevelDb中的主要作用是系統(tǒng)故障恢復(fù)時(shí),能夠保證不會(huì)丟失數(shù)據(jù)。因?yàn)樵趯⒂涗泴懭雰?nèi)存的Memtable之前,會(huì)先寫入Log文件,這樣即使系統(tǒng)發(fā)生故障,Memtable中的數(shù)據(jù)沒有來得及Dump到磁盤的SSTable文件,LevelDB也可以根據(jù)log文件
推薦度:
標(biāo)簽: 文件 系列 leveldb
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top