數(shù)據(jù)存儲--B樹

幾乎所有的關(guān)系型數(shù)據(jù)庫和相當(dāng)數(shù)量的非關(guān)系型數(shù)據(jù)庫抽减,在內(nèi)部都實現(xiàn)了B樹作為索引的組織結(jié)構(gòu)睡雇。
之前所說的日志結(jié)構(gòu)的數(shù)據(jù)存儲速种,將數(shù)據(jù)切分成若干規(guī)定大小的數(shù)據(jù)片組織存儲根灯。在各個數(shù)據(jù)片內(nèi)保證數(shù)據(jù)按鍵排序。B樹則將數(shù)據(jù)存放于固定大兄蟹(通常是4KB)的片中姜胖,每次讀寫一個完整片(這是為了配合機械磁盤的設(shè)計)。


B tree圖例

可以看出淀散,B樹中只有葉子節(jié)點是包含數(shù)據(jù)本身的(圖中的val)右莱,其他層都是數(shù)據(jù)引用(圖中的ref)。每個節(jié)點的子節(jié)點個數(shù)也叫做B樹的分支度(比如上圖的分支度就是6)档插。
B樹的結(jié)構(gòu)可以保證樹的平衡(balanced):即對于有n個節(jié)點的B樹慢蜓,樹高為O(log(n))。一個四層高郭膛,分支度為500的B樹晨抡,可以支持存儲最多256TB的數(shù)據(jù)。

在插入操作時则剃,B樹的數(shù)據(jù)片可能會發(fā)生溢出而分裂成兩個半滿的數(shù)據(jù)片耘柱,在這個數(shù)據(jù)轉(zhuǎn)移的過程中,為了防止數(shù)據(jù)庫存儲崩潰棍现,引入了操作日志(WAL调煎,或者叫redo log)。在并發(fā)寫控制上己肮,使用的是latches(一個輕量級的寫鎖)士袄。
還有一些其他的優(yōu)化措施:

  • 有些數(shù)據(jù)庫不使用WAL做數(shù)據(jù)容災(zāi),而是使用copy-on-write模式:將修改過的數(shù)據(jù)另外寫到一個位置朴肺,為這個數(shù)據(jù)節(jié)點的父節(jié)點創(chuàng)建一個新的版本窖剑。因為引入了版本號的概念坚洽,這個措施也被用于并發(fā)控制戈稿。
  • 對于單條數(shù)據(jù)比較大的情況,在非葉子節(jié)點中可以不存儲完整鍵讶舰,只存儲可以區(qū)分?jǐn)?shù)據(jù)的唯一鍵即可鞍盗,這樣可以增大B樹的分支度而降低樹高。
  • 在各個數(shù)據(jù)節(jié)點之間使用指針串聯(lián)跳昼,方便大范圍順序讀取般甲。

B樹與LSM樹

簡單來說,LSM-trees在寫操作上速度更快鹅颊,而B-trees在讀操作上速度更快敷存。
LSM-trees的優(yōu)點:
B樹至少要把數(shù)據(jù)寫入兩遍:一遍是寫入到數(shù)據(jù)葉子節(jié)點中(如果發(fā)生頁滿分頁的情況,還要再加一遍),一遍是寫入到WAL日志中锚烦。而LSM-trees也會把數(shù)據(jù)寫入多遍(主要發(fā)生在SSTables的合并壓縮過程中)觅闽。這種在數(shù)據(jù)生存期內(nèi)多次寫入數(shù)據(jù)叫做寫入放大(write amplification)。在寫密集操作的場景下涮俄,寫入放大是數(shù)據(jù)庫吞吐的主要瓶頸蛉拙。
相比B樹,LSM樹的寫入放大倍數(shù)較小彻亲,通吃谐可以抵御更高的寫請求,而且LSM樹中主要的寫操作都是追加操作苞尝,相比B樹中的隨機寫入畸肆,效率要高一些。
LSM樹結(jié)構(gòu)導(dǎo)致的磁盤碎片更少野来,它會周期性的合并壓縮SSTables來消除磁盤碎片恼除,而B樹中則可能出現(xiàn)樹不滿的情況,導(dǎo)致磁盤碎片較多曼氛。

LSM-trees的缺點:
定期的SSTables合并壓縮操作會占用部分磁盤資源(IO帶寬)豁辉,影響數(shù)據(jù)庫的吞吐能力。
隨著數(shù)據(jù)增多舀患,更多的IO帶寬需要被進(jìn)行合并壓縮操作的線程占據(jù)徽级,當(dāng)發(fā)生大量寫操作,或者IO帶寬分配不好的情況下聊浅,有可能出現(xiàn)合并壓縮的操作速率遠(yuǎn)低于寫入操作餐抢,各個數(shù)據(jù)片數(shù)據(jù)持續(xù)增大,最終溢出低匙。
B樹的優(yōu)勢在于旷痕,原始數(shù)據(jù)在樹中只有一份,而LSM樹的原始數(shù)據(jù)份數(shù)會隨著更新操作而增加顽冶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欺抗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子强重,更是在濱河造成了極大的恐慌绞呈,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件间景,死亡現(xiàn)場離奇詭異佃声,居然都是意外死亡,警方通過查閱死者的電腦和手機倘要,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門圾亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事志鹃「妇В” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵弄跌,是天一觀的道長甲喝。 經(jīng)常有香客問我,道長铛只,這世上最難降的妖魔是什么埠胖? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮淳玩,結(jié)果婚禮上直撤,老公的妹妹穿的比我還像新娘。我一直安慰自己蜕着,他們只是感情好谋竖,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著承匣,像睡著了一般蓖乘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上韧骗,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天嘉抒,我揣著相機與錄音,去河邊找鬼袍暴。 笑死些侍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的政模。 我是一名探鬼主播岗宣,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淋样!你這毒婦竟也來了耗式?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤习蓬,失蹤者是張志新(化名)和其女友劉穎纽什,沒想到半個月后措嵌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躲叼,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年企巢,在試婚紗的時候發(fā)現(xiàn)自己被綠了枫慷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖或听,靈堂內(nèi)的尸體忽然破棺而出探孝,到底是詐尸還是另有隱情,我是刑警寧澤誉裆,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布顿颅,位于F島的核電站,受9級特大地震影響足丢,放射性物質(zhì)發(fā)生泄漏粱腻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一斩跌、第九天 我趴在偏房一處隱蔽的房頂上張望绍些。 院中可真熱鬧,春花似錦耀鸦、人聲如沸柬批。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽氮帐。三九已至,卻和暖如春洛姑,著一層夾襖步出監(jiān)牢的瞬間揪漩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工吏口, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奄容,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓产徊,卻偏偏與公主長得像昂勒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子舟铜,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

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

  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結(jié)點至多有m個孩子戈盈。 除根結(jié)點和葉子結(jié)點外,其它每個結(jié)點至少有m...
    文檔隨手記閱讀 13,199評論 0 25
  • MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎(第2版) 姜承堯 第1章 MySQL體系結(jié)構(gòu)和存儲引擎 >> 在上述例子...
    沉默劍士閱讀 7,398評論 0 16
  • 單機存儲引擎就是哈希表谆刨、B樹等數(shù)據(jù)結(jié)構(gòu)在機械磁盤塘娶、SSD等持久化介質(zhì)上的實現(xiàn)。單機存儲系統(tǒng)是單機存儲引擎的一種封裝...
    olostin閱讀 2,413評論 0 5
  • 拆卸 我們現(xiàn)在有了一個功能齊全的虛擬機痊夭,可以用于基本的web開發(fā)刁岸。但是現(xiàn)在如果說需要更換設(shè)備,或者在另一個項目工作...
    chenggx閱讀 527評論 0 0
  • 2017.06.16 星期五 晴 今天有件意想不到的事發(fā)生了她我,那就是托付班舉行了書法比賽的活動虹曙,這是一件...
    美好往事閱讀 131評論 0 0