RocksDB 学习笔记
? ? ?? RocksDB是FaceBook起初作為實驗性質(zhì)開發(fā)的一個高效數(shù)據(jù)庫軟件,旨在充分實現(xiàn)快存上存儲數(shù)據(jù)的服務(wù)能力。RocksDB的主要設(shè)計點是在快存和高服務(wù)壓力下性能表現(xiàn)優(yōu)越,支持point lookup 和 range scan。RockesDB?是一個嵌入式的K-V(任意字節(jié)流)存儲,?支持Get(key)、Put(Key)、Delete(Key)和NewIterator()。RocksDB的基本組成是memtable、sstfile和logfile。RocksDB架構(gòu)圖如下:
Iterator和Snapshot提供了DB在某個時間點的一個一致性視圖,快速短期/前臺的scan操作比較適合用Iterator,長期/后臺操作適合用Snapshot。Iterator過程中會增加引用計數(shù),當(dāng)實例重啟時,Snapshot會丟失。
RocksDB提供了多個操作的事務(wù)性,支持悲觀和樂觀模式。
prefix_extractor來聲明一個key_prefix,然后RocksDB為每一個key_prefix存儲相應(yīng)的blooms,提升RangeScan操作。
RocksDB通過checksum來檢測磁盤數(shù)據(jù)損壞。
當(dāng)用戶重復(fù)寫入一個key時,在DB中會存在這個key的多個value,compaction操作就是來刪除這個key的冗余數(shù)據(jù)。RocksDB也支持多線程并行compaction。多線程并行flush操作可能會引起寫停頓。
RocksDB支持全量備份、增量備份和復(fù)制。
RocksDb 支持 LRU 和 CLock兩種模式。cache的每個分片都有自己的LRU list和hash表來查找使用。每個shard都有個mutex來控制數(shù)據(jù)并發(fā)訪問。不管是數(shù)據(jù)查找還是數(shù)據(jù)寫入,線程都要獲取cache分片的鎖。CLOCK CACHE的每個shard都有一個cache entry的圓環(huán)list。算法會遍歷圓環(huán)的所有entry尋找unspined entry來回收。
RocksDB原生地就支持三種記錄類型,分別為Put、Delete和Merge。Merge可以合并多個Put和Merge記錄為一個單獨的記錄。
MemTable是一種在內(nèi)存中保存數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),一旦MemTable滿了,就會轉(zhuǎn)換為只讀的不可改變的,然后會創(chuàng)建一個新的MemTable來提供新的寫操作。后臺線程負(fù)責(zé)將MemTable中的數(shù)據(jù)flush到SST file,然后這個MemTable就會被銷毀。memtable的默認(rèn)實現(xiàn)是skiplist,用戶也可以使用 HashLinkList、HashSkipList or Vector 來提高查詢性能。
每個SST file都有相應(yīng)的一個Bloom filter。
backup engine一直保持打開狀態(tài),不需要在每一次backup或者restore時都重新創(chuàng)建;?另一種加速backup engine 初始化的方法就是刪除非必須的backup。
Checkpoints是一個時間點上的snapshot。當(dāng)使用Read-only模式打開的話,可以支持查詢這個時間點上的數(shù)據(jù),當(dāng)使用Read-Write模式打開的話,可以作為一個可寫的snapshot。Checkpoints可以作為全量或者新增備份的backup使用。
SST file的index/filter會被分片為多個小 block,并會配備一個索引。當(dāng)需要讀取index/filter時,只有top-level index會load到內(nèi)存。分片的好處:更高的cache 命中率,節(jié)省IO,不用在index/filters中間折衷。SSL文件索引查詢性能優(yōu)化,LSM tree build成功后,每一個層次的SST file的位置是對齊的,甚至,相對于下一層次的文件的位置也是對齊的。基于次,我們可以縮小二分搜索的范圍。
Simulation Cache(SimCache)可以幫助用戶在模擬的內(nèi)存容量而不是物理上實際占用內(nèi)存下預(yù)測block cache的性能數(shù)據(jù),比如:hit、miss。
?RocksDB可以通過兩種方式利用分層存儲架構(gòu):分層存儲部署和分層緩存部署。當(dāng)使用前者時,可以將LSM的數(shù)據(jù)分布在多層持久化存儲中。使用后者時,用戶可以使用快速的持久化媒介來提供高性能的讀cache服務(wù),避免頻繁讀取LSM的part數(shù)據(jù),提高RocksDB的整體性能。
RocksDB中二階段提交的實現(xiàn)。本文總結(jié)一下共有如下幾個要點:
- Modification of the WAL format
- Extension of the existing transaction API
- Modification of the write path
- Modification of the recovery path
- Integration with MyRocks
RocksDB Iterator提供用戶以有序的方式前向或者后向遍歷DB,也可以seek 到DB的特定key上。
?
參考:
Rocksdb的優(yōu)劣及應(yīng)用場景分析
RocksDB使用場景和特性
總結(jié)
以上是生活随笔為你收集整理的RocksDB 学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows镜像封装
- 下一篇: matlab调幅举例,基于MATLAB的