<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > Rocksdb原理簡(jiǎn)介

Rocksdb原理簡(jiǎn)介

發(fā)布人:天翼云開(kāi)發(fā)者 時(shí)間:2023-05-25 來(lái)源:工程師 發(fā)布文章
本文分享自天翼云開(kāi)發(fā)者社區《Rocksdb原理簡(jiǎn)介》,作者:l****n 

https://www.ctyun.cn/developer/article/419235671285829


Rocksdb作為當下nosql中性能的代表被各個(gè)存儲組件(mysql、tikv、pmdk、bluestore)作為存儲引擎底座,其基于LSM tree的核心存儲結構(將隨機寫(xiě)通過(guò)數據結構轉化為順序寫(xiě))來(lái)提供高性能的寫(xiě)吞吐時(shí)保證了讀性能。同時(shí)大量的并發(fā)性配置來(lái)降低compaction的影響。

image.png 

涉及到的幾個(gè)核心文件:

WAL

WriteAheadLog,rocksdb的日志,保存memtable中的信息。當memtable轉化為immutable memtable并且Flush到L0層之后,之前WAL的會(huì )被清理,即于刪除DB目錄下的log文件。

RocksDB中每一次數據的更新都會(huì )涉及到兩個(gè)結構,一個(gè)是內存中的memtable(后續會(huì )刷新到磁盤(pán)成為SST),第二個(gè)是WAL。

WAL主要的功能是當RocksDB異常退出后,能夠恢復出錯前的內存中(memtable)數據,因此RocksDB默認是每次用戶(hù)寫(xiě)都會(huì )刷新數據到WAL。每次當當前WAL對應的內存數據(memtable)刷新到磁盤(pán)之后,都會(huì )新建一個(gè)WAL。

所有的WAL文件都是保存在WAL目錄(options.wal_dir),為了保證數據的狀態(tài),所有的WAL文件的名字都是按照順序的(log_number)。

MANIFEST

RocksDB中MANIFEST保存了存儲引擎的內部的一些狀態(tài)元數據,簡(jiǎn)單來(lái)說(shuō)當系統異常重啟,或者程序異常被退出之后,RocksDB需要有一種機制能夠恢復到一個(gè)一致性的狀態(tài), 而這個(gè)一致性的狀態(tài)就是靠MANIFEST來(lái)保證的.

MANIFEST在RocksDB中是一個(gè)單獨的文件,而這個(gè)文件所保存的數據基本是來(lái)自于VersionEdit這個(gè)結構.

MANIFEST包含了兩個(gè)文件,一個(gè)log文件一個(gè)包含最新MANIFEST文件名的文件,Manifest的log文件名是這樣 MANIFEST-(seq number),這個(gè)seq會(huì )一直增長(cháng).只有當 超過(guò)了指定的大小之后,MANIFEST會(huì )刷新一個(gè)新的文件,當新的文件刷新到磁盤(pán)(并且文件名更新)之后,老的文件會(huì )被刪除掉。這里可以認為每一次MANIFEST的更新都代表一次snapshot。

CURRENT

記錄當前最新的MANIFEST文件編號

Memtable

常駐于內存中,在WAL寫(xiě)之后,記錄具體的key-value數據。在RocksDB中,每個(gè)ColumnFamily都有自己的Memtable,Column Family之間互不影響。而在RocksDB中Memtable有多種實(shí)現,SkipList/HashSkipList/HashLinkList/Vector,默認的實(shí)現為SkipList(只有skiplist可以并發(fā)插入)。memtable大小以及個(gè)數可以由指定的參數進(jìn)行控制:

write_buffer_size表示memtable的大小

max_write_buffer_number表示內存中最多可以同時(shí)存在多少個(gè)memtable的個(gè)數

Immutable memtable

memtable被寫(xiě)滿(mǎn)之后會(huì )生成一個(gè)新的memtable繼續接受IO,舊的memtable就會(huì )變成immutable memtable,為只讀的狀態(tài),且開(kāi)始由后臺線(xiàn)程Flush到磁盤(pán)的L0層sst。

SST

核心key-value的存儲文件,比如DB目錄下的000023.sst文件。默認分為L(cháng)0~L7層,當滿(mǎn)足一定條件時(shí)(本層sst總大小超過(guò)配置大小、WAL文件超過(guò)一定值)后臺開(kāi)啟compaction任務(wù),從當前層和下一層選取若干sst,做合并,并寫(xiě)入新的sst文件。

CcolumnFamily
RocksDB 3.0中加入了Column Family特性,加入這個(gè)特性之后,每一個(gè)KV對都會(huì )關(guān)聯(lián)一個(gè)Column Family,其中默認的Column Family是 "default"。Column Family主要是提供給RocksDB一個(gè)邏輯的分區。從實(shí)現上來(lái)看不同的Column Family共享WAL,而都有自己的memtable和SST,同時(shí)擁有自己的配置。這就意味著(zhù)我們可以快速方便的設置不同的屬性的Column Family以及快速刪除對應的Column Family。但是因為Column Family共享WAL,可能會(huì )咬住WAL,讓W(xué)AL快速增長(cháng)從而觸發(fā)memtable的強制Flush。

 


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 存儲 存儲引擎

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>