Rocksdb的优劣及应用场景分析
?
Rocksdb的優(yōu)劣及應(yīng)用場(chǎng)景分析?
Rocksdb也是一樣,也有它的優(yōu)勢(shì)劣勢(shì)及特定的適用場(chǎng)景。今天我就從設(shè)計(jì)的角度來(lái)分析一下。
基礎(chǔ)架構(gòu)
? ? ? ?上圖就是Rocksdb的基礎(chǔ)架構(gòu)。Rocksdb中引入了ColumnFamily(列族, CF)的概念,所謂列族也就是一系列kv組成的數(shù)據(jù)集。所有的讀寫(xiě)操作都需要先指定列族。寫(xiě)操作先寫(xiě)WAL,再寫(xiě)memtable,memtable達(dá)到一定閾值后切換為Immutable Memtable,只能讀不能寫(xiě)。后臺(tái)Flush線(xiàn)程負(fù)責(zé)按照時(shí)間順序?qū)mmu Memtable刷盤(pán),生成level0層的有序文件(SST)。后臺(tái)合并線(xiàn)程負(fù)責(zé)將上層的SST合并生成下層的SST。Manifest負(fù)責(zé)記錄系統(tǒng)某個(gè)時(shí)刻SST文件的視圖,Current文件記錄當(dāng)前最新的Manifest文件名。 ?每個(gè)ColumnFamily有自己的Memtable, SST文件,所有ColumnFamily共享WAL、Current、Manifest文件。
架構(gòu)分析
? ? ? ?整個(gè)系統(tǒng)的設(shè)計(jì)思路很好理解,這種設(shè)計(jì)的優(yōu)勢(shì)很明顯,主要有以下幾點(diǎn):
? ? ? 1.所有的刷盤(pán)操作都采用append方式,這種方式對(duì)磁盤(pán)和SSD是相當(dāng)有誘惑力的;
? ? ? 2.寫(xiě)操作寫(xiě)完WAL和Memtable就立即返回,寫(xiě)效率非常高。 ?
? ? ? ?3.由于最終的數(shù)據(jù)是存儲(chǔ)在離散的SST中,SST文件的大小可以根據(jù)kv的大小自由配置, ? ? ? ? ? ?因此很適合做變長(zhǎng)存儲(chǔ)。
? ? ? 但是這種設(shè)計(jì)也帶來(lái)了很多其他的問(wèn)題:
? ? ? ?1.為了支持批量和事務(wù)以及上電恢復(fù)操作,WAL是多個(gè)CF共享的,導(dǎo)致了WAL的單線(xiàn)程寫(xiě) ? ? ? ?模式,不能充分發(fā)揮高速設(shè)備的性能優(yōu)勢(shì)(這是相對(duì)介質(zhì)講,相對(duì)B樹(shù)等其他結(jié)構(gòu)還是有優(yōu) ? ? ? ?勢(shì));
? ? ? ?2.讀寫(xiě)操作都需要對(duì)Memtable進(jìn)行互斥訪(fǎng)問(wèn),在多線(xiàn)程并發(fā)寫(xiě)及讀寫(xiě)混合的場(chǎng)景下容易形 ? ? ? ?成瓶頸。
? ? ? 3.由于Level0層的文件是按照時(shí)間順序刷盤(pán)的,而不是根據(jù)key的范圍做劃分,所以導(dǎo)致各 ? ? ? ? 個(gè)文件之間范圍有重疊,再加上文件自上向下的合并,讀的時(shí)候有可能需要查找level0層的 ? ? ? ? ?多個(gè)文件及其他層的文件,這也造成了很大的讀放大。尤其是當(dāng)純隨機(jī)寫(xiě)入后,讀幾乎是 ? ? ? ? ?要查詢(xún)level0層的所有文件,導(dǎo)致了讀操作的低效。
? ? ? 4.針對(duì)第三點(diǎn)問(wèn)題,Rocksdb中依據(jù)level0層文件的個(gè)數(shù)來(lái)做前臺(tái)寫(xiě)流控及后臺(tái)合并觸發(fā), ? ? ? ? ?以此來(lái)平衡讀寫(xiě)的性能。這又導(dǎo)致了性能抖動(dòng)及不能發(fā)揮高速介質(zhì)性能的問(wèn)題。 ?
? ? ?5.合并流程難以控制,容易造成性能抖動(dòng)及寫(xiě)放大。尤其是寫(xiě)放大問(wèn)題,在筆者的使用過(guò)程中實(shí)際測(cè)試的寫(xiě)放大經(jīng)常達(dá)到二十倍左右。這是不可接受的,當(dāng)前我們也沒(méi)有找到合適的解決辦法,只是暫時(shí)采用大value分離存儲(chǔ)的方式來(lái)將寫(xiě)放大盡量控制在小數(shù)據(jù)。
適用場(chǎng)景
? ? ? ?1.對(duì)寫(xiě)性能要求很高,同時(shí)有較大內(nèi)存來(lái)緩存SST塊以提供快速讀的場(chǎng)景;
? ? ? ?2.SSD等對(duì)寫(xiě)放大比較敏感以及磁盤(pán)等對(duì)隨機(jī)寫(xiě)比較敏感的場(chǎng)景;
? ? ? 3.需要變長(zhǎng)kv存儲(chǔ)的場(chǎng)景; ?
? ? ? 4.小規(guī)模元數(shù)據(jù)的存取;
不適合場(chǎng)景
? ? ? ?1.大value的場(chǎng)景,需要做kv分離;
? ? ? ?2.大規(guī)模數(shù)據(jù)的存取
作者:從此啟航
鏈接:https://www.jianshu.com/p/73fa1d4e4273
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的Rocksdb的优劣及应用场景分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 7月29日绝地求生服务器维护,绝地求生7
- 下一篇: 软件开发过程模型(瀑布模型,快速原型模型