Rocksdb作為當下nosql中性能的代表被各個存儲組件(mysql、tikv、pmdk、bluestore)作為存儲引擎底座,其基于LSM tree的核心存儲結(jié)構(gòu)(將隨機寫通過數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為順序?qū)懀﹣硖峁└咝阅艿膶懲掏聲r保證了讀性能。同時大量的并發(fā)性配置來降低compaction的影響。
涉及到的幾個核心文件:
WAL
WriteAheadLog,rocksdb的日志,保存memtable中的信息。當memtable轉(zhuǎn)化為immutable memtable并且Flush到L0層之后,之前WAL的會被清理,即于刪除DB目錄下的log文件。
在RocksDB中每一次數(shù)據(jù)的更新都會涉及到兩個結(jié)構(gòu),一個是內(nèi)存中的memtable(后續(xù)會刷新到磁盤成為SST),第二個是WAL。
WAL主要的功能是當RocksDB異常退出后,能夠恢復出錯前的內(nèi)存中(memtable)數(shù)據(jù),因此RocksDB默認是每次用戶寫都會刷新數(shù)據(jù)到WAL。每次當當前WAL對應的內(nèi)存數(shù)據(jù)(memtable)刷新到磁盤之后,都會新建一個WAL。
所有的WAL文件都是保存在WAL目錄(options.wal_dir),為了保證數(shù)據(jù)的狀態(tài),所有的WAL文件的名字都是按照順序的(log_number)。
MANIFEST
在RocksDB中MANIFEST保存了存儲引擎的內(nèi)部的一些狀態(tài)元數(shù)據(jù),簡單來說當系統(tǒng)異常重啟,或者程序異常被退出之后,RocksDB需要有一種機制能夠恢復到一個一致性的狀態(tài), 而這個一致性的狀態(tài)就是靠MANIFEST來保證的.
MANIFEST在RocksDB中是一個單獨的文件,而這個文件所保存的數(shù)據(jù)基本是來自于VersionEdit這個結(jié)構(gòu).
MANIFEST包含了兩個文件,一個log文件一個包含最新MANIFEST文件名的文件,Manifest的log文件名是這樣 MANIFEST-(seq number),這個seq會一直增長.只有當 超過了指定的大小之后,MANIFEST會刷新一個新的文件,當新的文件刷新到磁盤(并且文件名更新)之后,老的文件會被刪除掉。這里可以認為每一次MANIFEST的更新都代表一次snapshot。
CURRENT
記錄當前最新的MANIFEST文件編號
Memtable
常駐于內(nèi)存中,在WAL寫之后,記錄具體的key-value數(shù)據(jù)。在RocksDB中,每個ColumnFamily都有自己的Memtable,Column Family之間互不影響。而在RocksDB中Memtable有多種實現(xiàn),SkipList/HashSkipList/HashLinkList/Vector,默認的實現(xiàn)為SkipList(只有skiplist可以并發(fā)插入)。memtable大小以及個數(shù)可以由指定的參數(shù)進行控制:
write_buffer_size表示memtable的大小
max_write_buffer_number表示內(nèi)存中最多可以同時存在多少個memtable的個數(shù)
Immutable memtable
當memtable被寫滿之后會生成一個新的memtable繼續(xù)接受IO,舊的memtable就會變成immutable memtable,為只讀的狀態(tài),且開始由后臺線程Flush到磁盤的L0層sst。
SST
核心key-value的存儲文件,比如DB目錄下的000023.sst文件。默認分為L0~L7層,當滿足一定條件時(本層sst總大小超過配置大小、WAL文件超過一定值)后臺開啟compaction任務,從當前層和下一層選取若干sst,做合并,并寫入新的sst文件。
CcolumnFamily
RocksDB 3.0中加入了Column Family特性,加入這個特性之后,每一個KV對都會關聯(lián)一個Column Family,其中默認的Column Family是 "default"。Column Family主要是提供給RocksDB一個邏輯的分區(qū)。
從實現(xiàn)上來看不同的Column Family共享WAL,而都有自己的memtable和SST,同時擁有自己的配置。這就意味著我們可以快速方便的設置不同的屬性的Column Family以及快速刪除對應的Column Family。
但是因為Column Family共享WAL,可能會咬住WAL,讓WAL快速增長從而觸發(fā)memtable的強制Flush。
-
SST
+關注
關注
0文章
69瀏覽量
35336 -
FLUSH
+關注
關注
0文章
4瀏覽量
5441
發(fā)布評論請先 登錄
相關推薦
TraceX使用簡介
FPGA簡介
NoOs簡介
基于全HDD aarch64服務器的Ceph性能調(diào)優(yōu)實踐總結(jié)
【RocksDB】TransactionDB源碼分析
![【<b class='flag-5'>RocksDB</b>】TransactionDB源碼分析](https://file.elecfans.com/web1/M00/57/F4/o4YBAFtQXYGAaYIPAACRzdSJaQY819.png)
看圖了解RocksDB
![看圖了解<b class='flag-5'>RocksDB</b>](https://file.elecfans.com/web1/M00/6D/C4/pIYBAFvtLnKAJnsUAAG8O0xcaHw541.png)
評論