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