RocksDB系列二十二:RocksDB使用場(chǎng)景和特性

??存儲(chǔ)和訪問(wèn)數(shù)百PB的數(shù)據(jù)是一個(gè)非常大的挑戰(zhàn)铡溪,開源的RocksDB就是FaceBook開放的一種嵌入式、持久化存儲(chǔ)衡蚂、KV型且非常適用于fast storage的存儲(chǔ)引擎窿克。
??傳統(tǒng)的數(shù)據(jù)訪問(wèn)都是RPC,但是這樣的話訪問(wèn)速度會(huì)很慢毛甲,不適用于面向用戶的實(shí)時(shí)訪問(wèn)的場(chǎng)景年叮。隨著fast storage的流行,越來(lái)越多的應(yīng)用可以通過(guò)在flash中管理數(shù)據(jù)并快速直接的訪問(wèn)數(shù)據(jù)玻募。這些應(yīng)用就需要使用到一種嵌入式的database只损。
??使用嵌入式的database的原因有很多。當(dāng)數(shù)據(jù)請(qǐng)求頻繁訪問(wèn)內(nèi)存或者fast storage時(shí)七咧,網(wǎng)路延時(shí)會(huì)增加響應(yīng)時(shí)間跃惫,比如:訪問(wèn)數(shù)據(jù)中心網(wǎng)絡(luò)耗時(shí)可能就耗費(fèi)50ms,跟訪問(wèn)數(shù)據(jù)的耗時(shí)一樣多艾栋,甚至更多爆存。這意味著,通過(guò)RPC訪問(wèn)數(shù)據(jù)有可能是本地直接訪問(wèn)耗時(shí)的兩倍蝗砾。另外先较,機(jī)器的core數(shù)越來(lái)越多,storage-IOPS的訪問(wèn)頻率也達(dá)到了每秒百萬(wàn)次悼粮,傳統(tǒng)數(shù)據(jù)庫(kù)的鎖競(jìng)爭(zhēng)和context 切換會(huì)成為提高storage-IOPS的瓶頸闲勺。所以需要一種容易擴(kuò)展和針對(duì)未來(lái)硬件趨勢(shì)可以定制化的database,RocksDB就是一種選擇扣猫。
??RocksDB是基于Google的開源key value存儲(chǔ)庫(kù)LevelDB菜循,主要滿足以下目標(biāo):

1、適用于多cpu場(chǎng)景

??商業(yè)服務(wù)器一般會(huì)有很多cpu核苞笨,要開發(fā)一個(gè)隨著CPU 核數(shù)吞吐量也隨之增大的數(shù)據(jù)庫(kù)是很困難的债朵,更別提是線性的遞增關(guān)系子眶。但是,RocksDB是可以高效地運(yùn)行在多核服務(wù)器上序芦。一個(gè)優(yōu)點(diǎn)是RocksDB提供的語(yǔ)義比傳統(tǒng)的DBMS更簡(jiǎn)單臭杰。例如:RocksDB支持MVCC,但是僅限于只讀的transaction谚中。另一個(gè)優(yōu)點(diǎn)是數(shù)據(jù)庫(kù)在邏輯上分片為read-only path和read-write path渴杆。這兩種方法可以降低鎖競(jìng)爭(zhēng),而降低鎖競(jìng)爭(zhēng)是支持高并發(fā)負(fù)載的前提條件宪塔。

2磁奖、高校利用storage(更高的IOPS、高效的壓縮某筐、更少的寫磨損)

??現(xiàn)在的存儲(chǔ)設(shè)備都可以支持到每秒10w的隨機(jī)讀比搭,如果有10塊存儲(chǔ)卡的話就可以支持每秒100w的隨機(jī)讀。RocksDB可以在這種快速存儲(chǔ)上高效運(yùn)行且不會(huì)成為性能瓶頸南誊。
??和實(shí)時(shí)更新的B-tree相比身诺,RocksDB有更好的壓縮和更小的寫放大。RocksDB由于壓縮更優(yōu)抄囚,所以占用更少的storage霉赡;由于更小的寫放大,flash 設(shè)備可以更持久幔托。

3穴亏、彈性架構(gòu),支持?jǐn)U展

??RocksDB支持?jǐn)U展重挑。比如嗓化,我們可以新增一個(gè)merge operator,這樣就可以使用write-only來(lái)替代read-modify-write谬哀。然而蟆湖,read和Write是會(huì)增加存儲(chǔ)的讀寫IOPS。在寫頻繁的負(fù)載下玻粪,這種措施可以降低IOPS。

4诬垂、支持IO-bound劲室、in-memory、write-once

??IO-bound workload是指數(shù)據(jù)庫(kù)大小遠(yuǎn)大于內(nèi)存且頻繁地訪問(wèn)storage结窘。in-memory workload是指數(shù)據(jù)庫(kù)數(shù)據(jù)都在內(nèi)存中且仍然使用storage來(lái)持久化存儲(chǔ)DB很洋。write-once workload是指大部分的key都只會(huì)寫入一次或者insert且沒(méi)有更新操作。現(xiàn)在RocksDB很好支持IO-bound隧枫,要想更好地支持in-memory喉磁,需要做一些工作谓苟。支持write-once的話,還有很多遺留問(wèn)題待解決协怒。

??RocksDB不是一個(gè)分布式的DB涝焙,而是一個(gè)高效、高性能孕暇、單點(diǎn)的數(shù)據(jù)庫(kù)引擎仑撞。RocksDB是一個(gè)持久化存儲(chǔ)keys和values的c++ library。keys 和values可以是任意的字節(jié)流妖滔,且按照keys有序存儲(chǔ)隧哮。后臺(tái)的compaction會(huì)消除重復(fù)的和已刪除的key。RocksDB的data以log-structured merge tree的形式存儲(chǔ)座舍。RocksDB支持原子的批量寫入操作以及前向和后向遍歷沮翔。
??RocksDB采用“可插拔式”的架構(gòu),所以很容易替換其中的組件曲秉,允許用戶很容易在不同的負(fù)載和硬件設(shè)備上進(jìn)行調(diào)優(yōu)采蚀。


1441593_10151976018697200_1580274673_n.png

??比如,用戶可以添加不同的壓縮模塊(snappy, zlib, bzip, etc)岸浑,且使用不同模塊時(shí)不用修改源碼搏存。這可用于在不同負(fù)載下通過(guò)配置使用不同的壓縮算法。同理矢洲,用戶可以在compaction時(shí)加載個(gè)性化的compaction filter來(lái)處理keys璧眠,例如,可以實(shí)現(xiàn)DB的key的"expire-time"功能读虏。RocksDB有可插拔式的API责静,所以應(yīng)用可以設(shè)計(jì)個(gè)性化的數(shù)據(jù)結(jié)構(gòu)來(lái)cache DB的寫數(shù)據(jù),典型應(yīng)用就是prefix-hash盖桥,其中一部分key使用hash存儲(chǔ)灾螃,剩下的key存儲(chǔ)在B-tree。storage file的實(shí)現(xiàn)也可以定制開發(fā)揩徊,所以用戶可以實(shí)現(xiàn)自己的storage file格式腰鬼。
??RocksDB支持兩種compaction style(level style和universal style)。這兩種style可做讀放大塑荒、寫放大熄赡、空間放大之間做tradeoff。compaction也支持多線程齿税,所以打的DB可以支持高性能的compaction彼硫。
??RocksDB也提供在線的增量備份接口,也支持bloom filters,這可以在range-scan時(shí)降低IOPS拧篮。
??RocksDB可以充分挖掘使用flash的IOPS词渤,在隨機(jī)讀、隨機(jī)寫和bulk load時(shí)性能優(yōu)于LevelDB串绩。在隨機(jī)寫和bulk load時(shí)缺虐,性能優(yōu)于LevelDB 10倍,在隨機(jī)讀時(shí)性能優(yōu)于LevelDB 30%赏参。
??LevelDB是單線程執(zhí)行compaction志笼,在特定的server workload下表現(xiàn)堪憂,但是RocksDB在IO-bound workload下性能明顯優(yōu)于LevelDB把篓。在測(cè)試中發(fā)現(xiàn)纫溃,LevelDB發(fā)生頻繁的write-stall,這嚴(yán)重影響了DB的99%延遲韧掩,另外也發(fā)現(xiàn)紊浩,把文件mmap到OS cache會(huì)引入讀性能瓶頸。測(cè)試表明疗锐,應(yīng)用不能充分使用flash的高性能坊谁,這是因?yàn)閿?shù)據(jù)的帶寬瓶頸引起了LevelDB的寫放大。通過(guò)提高寫速率和降低寫放大滑臊,可以避免很多問(wèn)題口芍,同時(shí)提高RocksDB性能。
RocksDB的典型場(chǎng)景(低延時(shí)訪問(wèn)):
1雇卷、需要存儲(chǔ)用戶的查閱歷史記錄和網(wǎng)站用戶的應(yīng)用
2鬓椭、需要快速訪問(wèn)數(shù)據(jù)的垃圾檢測(cè)應(yīng)用
3、需要實(shí)時(shí)scan數(shù)據(jù)集的圖搜索query
4关划、需要實(shí)時(shí)請(qǐng)求Hadoop的應(yīng)用
5小染、支持大量寫和刪除操作的消息隊(duì)列

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贮折,隨后出現(xiàn)的幾起案子裤翩,更是在濱河造成了極大的恐慌,老刑警劉巖调榄,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踊赠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡每庆,警方通過(guò)查閱死者的電腦和手機(jī)臼疫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)扣孟,“玉大人,你說(shuō)我怎么就攤上這事荣赶》锛郏” “怎么了鸽斟?”我有些...
    開封第一講書人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)利诺。 經(jīng)常有香客問(wèn)我富蓄,道長(zhǎng),這世上最難降的妖魔是什么慢逾? 我笑而不...
    開封第一講書人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任立倍,我火速辦了婚禮,結(jié)果婚禮上侣滩,老公的妹妹穿的比我還像新娘口注。我一直安慰自己,他們只是感情好君珠,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開白布寝志。 她就那樣靜靜地躺著,像睡著了一般策添。 火紅的嫁衣襯著肌膚如雪材部。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評(píng)論 1 291
  • 那天唯竹,我揣著相機(jī)與錄音乐导,去河邊找鬼。 笑死浸颓,一個(gè)胖子當(dāng)著我的面吹牛物臂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猾愿,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鹦聪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蒂秘?” 一聲冷哼從身側(cè)響起泽本,我...
    開封第一講書人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姻僧,沒(méi)想到半個(gè)月后规丽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撇贺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年赌莺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片松嘶。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艘狭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情巢音,我是刑警寧澤遵倦,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站官撼,受9級(jí)特大地震影響梧躺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傲绣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一掠哥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秃诵,春花似錦续搀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嗤练,卻和暖如春榛了,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背煞抬。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工霜大, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人革答。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓战坤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親残拐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子途茫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,914評(píng)論 2 89
  • 1.強(qiáng)制IE瀏覽器使用最高級(jí)別可用渲染模式顯示網(wǎng)頁(yè): 2.圖片的高度和寬度其中一個(gè)設(shè)置為定值,則另一個(gè)要設(shè)置為au...
    Ms_Apple閱讀 239評(píng)論 0 1
  • while(條件){當(dāng)條件為真時(shí)執(zhí)行別忘記增加條件中所用變量的值溪食,否則循環(huán)永遠(yuǎn)不會(huì)結(jié)束囊卜!}While 循環(huán)會(huì)在指定...
    三七_(dá)3eca閱讀 121評(píng)論 0 0
  • 產(chǎn)場(chǎng)所 美國(guó)類別:100%重組果汁 價(jià)格:¥45評(píng)論:厚色。 它味道酸甜错沃,有點(diǎn)苦栅组。果蔬清洗流水線苦味對(duì)許多人來(lái)說(shuō)可...
    大時(shí)代客閱讀 230評(píng)論 0 0