0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Rocksdb原理簡(jiǎn)介

冬至子 ? 來(lái)源:天翼云開(kāi)發(fā)者社區(qū) ? 作者:l**n ? 2023-06-01 17:17 ? 次閱讀

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

image.png

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

WAL

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

在RocksDB中每一次數(shù)據(jù)的更新都會(huì)涉及到兩個(gè)結(jié)構(gòu),一個(gè)是內(nèi)存中的memtable(后續(xù)會(huì)刷新到磁盤成為SST),第二個(gè)是WAL。

WAL主要的功能是當(dāng)RocksDB異常退出后,能夠恢復(fù)出錯(cuò)前的內(nèi)存中(memtable)數(shù)據(jù),因此RocksDB默認(rèn)是每次用戶寫都會(huì)刷新數(shù)據(jù)到WAL。每次當(dāng)當(dāng)前WAL對(duì)應(yīng)的內(nèi)存數(shù)據(jù)(memtable)刷新到磁盤之后,都會(huì)新建一個(gè)WAL。

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

MANIFEST

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

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

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

CURRENT

記錄當(dāng)前最新的MANIFEST文件編號(hào)

Memtable

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

write_buffer_size表示memtable的大小

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

Immutable memtable

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

SST

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

CcolumnFamily

RocksDB 3.0中加入了Column Family特性,加入這個(gè)特性之后,每一個(gè)KV對(duì)都會(huì)關(guān)聯(lián)一個(gè)Column Family,其中默認(rèn)的Column Family是 "default"。Column Family主要是提供給RocksDB一個(gè)邏輯的分區(qū)。

從實(shí)現(xiàn)上來(lái)看不同的Column Family共享WAL,而都有自己的memtable和SST,同時(shí)擁有自己的配置。這就意味著我們可以快速方便的設(shè)置不同的屬性的Column Family以及快速刪除對(duì)應(yīng)的Column Family。

但是因?yàn)镃olumn Family共享WAL,可能會(huì)咬住WAL,讓W(xué)AL快速增長(zhǎng)從而觸發(fā)memtable的強(qiáng)制Flush。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SST
    SST
    +關(guān)注

    關(guān)注

    0

    文章

    69

    瀏覽量

    35098
  • FLUSH
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    5413
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    DAC簡(jiǎn)介

    文章目錄一、DAC簡(jiǎn)介一、DAC簡(jiǎn)介
    發(fā)表于 08-09 08:18

    FPGA簡(jiǎn)介

    (06)FPGA資源評(píng)估1.1 目錄1)目錄2)FPGA簡(jiǎn)介3)Verilog HDL簡(jiǎn)介4)FPGA資源評(píng)估5)結(jié)語(yǔ)1.2 FPGA簡(jiǎn)介FPGA(Field Programmable Gate
    發(fā)表于 02-23 06:31

    NoOs簡(jiǎn)介

    NoOs文章目錄NoOs簡(jiǎn)介代碼目錄API 說(shuō)明移植快速上手更多示例License簡(jiǎn)介NoOs 名字的寓意取自于:“NoOs is not an operating system”。NoOs 的目標(biāo)是提供類似RTOS的開(kāi)發(fā)方式,代碼量比.
    發(fā)表于 03-01 07:52

    基于全HDD aarch64服務(wù)器的Ceph性能調(diào)優(yōu)實(shí)踐總結(jié)

    1 簡(jiǎn)介作為一個(gè)統(tǒng)一的分布式存儲(chǔ)系統(tǒng),Ceph為應(yīng)用程序提供了對(duì)象,塊和文件系統(tǒng)接口。考慮到TCO,我們搭建了一個(gè)全HDD的Ceph集群(每個(gè)節(jié)點(diǎn)11個(gè)HDD + 1個(gè)SSD),它在存儲(chǔ)利用率,性能
    發(fā)表于 07-05 14:26

    電感元件簡(jiǎn)介與展望

    電感元件簡(jiǎn)介與展望 電感元件原理,磁性鐵電材料,磁性電感元件分類,電感元件制程簡(jiǎn)介,電感元件規(guī)格與應(yīng)用。
    發(fā)表于 11-20 14:19 ?21次下載

    ANOTO技術(shù)簡(jiǎn)介

    ANOTO技術(shù)簡(jiǎn)介 一、Anoto技術(shù)簡(jiǎn)介 Anoto技術(shù)主要體現(xiàn)為三個(gè)組成部分:數(shù)碼紙、數(shù)碼筆及Anoto軟件平臺(tái)。 二、數(shù)碼紙
    發(fā)表于 09-17 18:11 ?3144次閱讀
    ANOTO技術(shù)<b class='flag-5'>簡(jiǎn)介</b>

    手機(jī)簡(jiǎn)介

    手機(jī)簡(jiǎn)介
    發(fā)表于 12-19 10:27 ?587次閱讀

    Windows CE簡(jiǎn)介、特點(diǎn)及應(yīng)用

    Windows CE簡(jiǎn)介、特點(diǎn)及應(yīng)用 一、Windows CE簡(jiǎn)介  
    發(fā)表于 01-11 08:43 ?3814次閱讀

    ISE10.1使用簡(jiǎn)介

    ISE10.1使用簡(jiǎn)介 ISE10.1使用簡(jiǎn)介
    發(fā)表于 02-18 18:16 ?9次下載

    Proteus示波器簡(jiǎn)介

    Proteus 中示波器的操作 簡(jiǎn)介簡(jiǎn)介基于 proteus7.8 版本
    發(fā)表于 03-22 11:19 ?15次下載

    RocksDB】TransactionDB源碼分析

    摘要:?RocksDB版本:v5.13.4 1. 概述 得益于LSM-Tree結(jié)構(gòu),RocksDB所有的寫入并非是update in-place,所以他支持起來(lái)事務(wù)的難度也相對(duì)較小,主要原理就是利用
    發(fā)表于 07-23 14:02 ?1923次閱讀
    【<b class='flag-5'>RocksDB</b>】TransactionDB源碼分析

    看圖了解RocksDB

    的壓力,臨時(shí)空間占用大。一般多采用level合并的方式。每個(gè)level都有max大小,超出后會(huì)觸發(fā)本level與下一level的文件合并到一起。不同level的合并是可以并發(fā)執(zhí)行的。對(duì)rocksdb做個(gè)
    發(fā)表于 11-15 16:28 ?214次閱讀
    看圖了解<b class='flag-5'>RocksDB</b>

    POE簡(jiǎn)介

    POE簡(jiǎn)介
    發(fā)表于 11-01 08:27 ?0次下載
    POE<b class='flag-5'>簡(jiǎn)介</b>

    存儲(chǔ)系統(tǒng)中的算法:LSM樹(shù)設(shè)計(jì)原理

    通過(guò)學(xué)習(xí)相關(guān)資料,我發(fā)現(xiàn) Apache BookKeeper 底層存儲(chǔ)引擎用的是 Facebook 開(kāi)源的 RocksDB,而 RocksDB 又是基于 Google 開(kāi)源的 LevelDB 改造
    的頭像 發(fā)表于 11-03 11:32 ?889次閱讀

    FST 簡(jiǎn)介

    FST 簡(jiǎn)介
    發(fā)表于 11-14 21:08 ?0次下載
    FST <b class='flag-5'>簡(jiǎn)介</b>