您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“MySQL的MyRocks是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“MySQL的MyRocks是什么”吧!
一 前言
最近一兩年,數(shù)據(jù)庫技術(shù)尤其是MySQL方面的發(fā)展可謂百花齊放,TokuDB,MyRocks ,MySQL 5.7 GA,MySQL 8.0 doc release 其軟件也在開發(fā)當(dāng)中,ALiSQL 開源。其中有功能上的改進(jìn)的,也有針對Innodb 本身缺陷(主要是存儲空間方面的)做優(yōu)化的,作為數(shù)據(jù)庫技術(shù)方面的從業(yè)者多少有些應(yīng)接不暇。
二 MyRocks 是什么
MyRocks是FB基于levelDB(使用LSM 組織數(shù)據(jù)結(jié)構(gòu))開發(fā)并且開源出來的數(shù)據(jù)庫存儲引擎,支持通用的MySQL 讀寫,鎖機(jī)制,MVCC,事務(wù)(目前僅支持RR,RC),主從復(fù)制。目前已經(jīng)在FB的用戶中心使用。
三 MyRocks 解決什么問題
這需要先從FB的業(yè)務(wù)模式來說,fb 作為全球最大的sns網(wǎng)站,其數(shù)據(jù)量巨大,需要存儲數(shù)據(jù)的服務(wù)器想必也是數(shù)十萬或者百萬級別的,這些都是money。(同樣也適用于阿里,騰訊這樣體量的公司)為了應(yīng)對未來存儲空間的增長和節(jié)約服務(wù)器,fb開發(fā)了此款存儲引擎。為啥Innodb 不滿足需求呢? 熟悉Innodb存儲引擎的朋友知道Innodb是基于B+Tree 實現(xiàn)的數(shù)據(jù)存儲,其默認(rèn)的數(shù)據(jù)塊大小是16k,目前支持可調(diào)節(jié)的block_size. 但是依然存在如下問題:
1 寫入放大.
B*tree要修改數(shù)據(jù)時,就需要將新入數(shù)據(jù)下面的數(shù)據(jù)重新排位,特別是當(dāng)寫入的數(shù)據(jù)排在較高的位置時,需要大量的移位操作才能完成寫入。而且InnoDB 讀寫訪問數(shù)據(jù)的最小邏輯單位是數(shù)據(jù)塊,隨機(jī)寫的情況下,修改N行,可能要修改N個數(shù)據(jù)塊。
MyRocks的寫操作以append only的方式。根據(jù)LSM Tree的算法,其將隨機(jī)寫轉(zhuǎn)化為順序?qū)?,寫操作只需更新?nèi)存,內(nèi)存中的數(shù)據(jù)以塊數(shù)據(jù)形式刷到磁盤,是順序的IO操作,另外磁盤文件定期的合并操作,也將帶來磁盤IO操作。
具體實現(xiàn)方式如下:
a 當(dāng)有寫操作(或update操作)時,寫入位于內(nèi)存的buffer,內(nèi)存中通過某種數(shù)據(jù)結(jié)構(gòu)(如skiplist)保持key有序。
b 一般的實現(xiàn)也會將數(shù)據(jù)追加寫到磁盤Log文件,以備必要時恢復(fù)。
c 內(nèi)存中的數(shù)據(jù)定時或按固定大小地刷到磁盤,更新操作只不斷地寫到內(nèi)存,并不更新磁盤上已有文件。
d 隨著越來越多寫操作,磁盤上積累的文件也越來越多,這些文件不可寫且有序。
e 定時對文件進(jìn)行合并操作(compaction),消除冗余數(shù)據(jù),減少文件數(shù)量。
2 磁盤空間碎片
B*tree分裂導(dǎo)致page內(nèi)有較多空閑空間,總體空間利用率不高。盡管Innodb提供壓縮的方式,但是壓縮以block為單位,也會造成浪費。比如總共16k的數(shù)據(jù),壓縮到5k 但是存儲磁盤依然需要8k 的空間。
3 RocksDB對齊開銷小:SST file (默認(rèn)2MB)需要對齊,但遠(yuǎn)大于4k, RocksDB_block_size(默認(rèn)4k) 不需要對齊,因此對齊浪費空間較少。
四 有哪些限制
1 MyRocks目前只支持兩種隔離級別,RC和RR。
2 鎖機(jī)制不健全 不支持gap lock
3 目前階段Innodb和Myrocks 混用不穩(wěn)定,Percona 在做合并的工作,ACMUG大會上的Percona工程師表示已經(jīng)測試了80%的場景。
4 binlog與RocksDB之間沒有xa,異常crash可能丟數(shù)據(jù)。所以,MyRocks一般開啟semi-sync.
5 讀性能上相對Inndb 比較弱,不支持MRR ,范圍查詢比較慢。
到此,相信大家對“MySQL的MyRocks是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。