LSM簡(jiǎn)介

簡(jiǎn)介

Log Structured Merge Tree社痛,下面簡(jiǎn)稱 LSM仔雷。

2006年,Google 發(fā)表了 BigTable 的論文渐白。這篇論文提到 BigTable 單機(jī)上所使用的數(shù)據(jù)結(jié)構(gòu)就是 LSM。

目前逞频,LSM 被很多存儲(chǔ)產(chǎn)品作為存儲(chǔ)結(jié)構(gòu)纯衍,比如 Apache HBase, Apache Cassandra, MongoDB 的 Wired Tiger 存儲(chǔ)引擎, LevelDB 存儲(chǔ)引擎, RocksDB 存儲(chǔ)引擎等。

簡(jiǎn)單地說(shuō)苗胀,LSM 的設(shè)計(jì)目標(biāo)是提供比傳統(tǒng)的 B+ 樹更好的寫性能襟诸。LSM 通過(guò)將磁盤的隨機(jī)寫轉(zhuǎn)化為順序?qū)憗?lái)提高寫性能 ,而付出的代價(jià)就是犧牲部分讀性能基协、寫放大(B+樹同樣有寫放大的問(wèn)題)歌亲。

LSM 相比 B+ 樹能提高寫性能的本質(zhì)原因是:外存——無(wú)論磁盤還是 SSD,其隨機(jī)讀寫都要慢于順序讀寫堡掏。

優(yōu)化寫性能

如果我們對(duì)寫性能特別敏感应结,我們最好怎么做?—— Append Only:所有寫操作都是將數(shù)據(jù)添加到文件末尾泉唁。這樣做的寫性能是最好的鹅龄,大約等于磁盤的理論速度(200 ~ 300 MB/s)。但是 Append Only 的方式帶來(lái)的問(wèn)題是:

  • 讀操作不方便亭畜。
  • 很難支持范圍操作扮休。
  • 需要垃圾回收(合并過(guò)期數(shù)據(jù))。

所以拴鸵,純粹的 Append Only 方式只能適用于一些簡(jiǎn)單的場(chǎng)景:

  • 數(shù)據(jù)庫(kù)的 WAL玷坠。
  • 能知道明確的 offset蜗搔,比如 Bitcask

優(yōu)化讀性能

如果我們對(duì)讀性能特別敏感八堡,一般我們有兩種方式:

  • 有序存儲(chǔ)樟凄,比如 B+ 樹,SkipList 等兄渺。
  • Hash 存儲(chǔ) —— 不支持范圍操作缝龄,適用范圍有限。

讀寫性能的權(quán)衡

如何獲得(接近) Append Only 的寫性能挂谍,而又能擁有不錯(cuò)的讀性能呢叔壤?

以 LevelDB 為代表的 LSM 存儲(chǔ)引擎給出了一個(gè)參考答案。注意口叙,LevelDB 實(shí)現(xiàn)的是優(yōu)化后的 LSM炼绘,原始的 LSM 可以參考論文。下面的討論主要以 LevelDB 為例子妄田。

LevelDB 的寫操作主要由兩步組成:

  1. 寫日志并持久化(Append Only)俺亮。
  2. Apply 到內(nèi)存中的 memtable(SkipList)。

所以形庭,LevelDB 的寫速度非城Υ牵快。

memtable 寫“滿”后萨醒,會(huì)轉(zhuǎn)換為 immutable memtable斟珊,然后被后臺(tái)線程 compaction 成按 Key 有序存儲(chǔ)的 sst 文件(順序?qū)懀S捎?sst 文件會(huì)有多個(gè)富纸,所以 LevelDB 的讀操作可能會(huì)有多次磁盤 IO(LevelDB 通過(guò) table cache囤踩、block cache 和 bloom filter 等優(yōu)化措施來(lái)減少讀操作的磁盤 IO 次數(shù))。

總結(jié)

基于 LSM 數(shù)據(jù)結(jié)構(gòu)的 LevelDB 的適用場(chǎng)景:

  • 寫請(qǐng)求多晓褪。
  • 寫性能(吞吐+延遲)要求高堵漱。

參考文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涣仿,隨后出現(xiàn)的幾起案子勤庐,更是在濱河造成了極大的恐慌,老刑警劉巖好港,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉镰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钧汹,警方通過(guò)查閱死者的電腦和手機(jī)丈探,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拔莱,“玉大人碗降,你說(shuō)我怎么就攤上這事隘竭。” “怎么了讼渊?”我有些...
    開(kāi)封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵动看,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我爪幻,道長(zhǎng)弧圆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任笔咽,我火速辦了婚禮,結(jié)果婚禮上霹期,老公的妹妹穿的比我還像新娘叶组。我一直安慰自己,他們只是感情好历造,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布甩十。 她就那樣靜靜地躺著,像睡著了一般吭产。 火紅的嫁衣襯著肌膚如雪侣监。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天臣淤,我揣著相機(jī)與錄音橄霉,去河邊找鬼。 笑死邑蒋,一個(gè)胖子當(dāng)著我的面吹牛姓蜂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播医吊,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼钱慢,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卿堂?” 一聲冷哼從身側(cè)響起束莫,我...
    開(kāi)封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎草描,沒(méi)想到半個(gè)月后览绿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陶珠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年挟裂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揍诽。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诀蓉,死狀恐怖栗竖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渠啤,我是刑警寧澤狐肢,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站沥曹,受9級(jí)特大地震影響份名,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜妓美,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一僵腺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壶栋,春花似錦辰如、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至毙玻,卻和暖如春豌蟋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桑滩。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工梧疲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人施符。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓往声,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戳吝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浩销,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 我是從一篇介紹LSM原理的文章的擴(kuò)展閱讀部分,找到這篇文章的听哭。前者的作者稱慢洋,后者對(duì)LSM的原理做了非常精彩的介紹。...
    古小黎閱讀 1,014評(píng)論 0 1
  • 譯文 自從谷歌發(fā)表了他的”big table“論文以來(lái)已經(jīng)過(guò)去了十年陆盘。論文中很酷的一點(diǎn)是它使用的文件組織方式普筹。在1...
    Dr_zhang閱讀 905評(píng)論 1 4
  • LevelDB是Google傳奇工程師Jeff Dean和Sanjay Ghemawat開(kāi)源的KV存儲(chǔ)引擎,無(wú)論從...
    CatKang閱讀 4,825評(píng)論 5 25
  • 單機(jī)存儲(chǔ)引擎就是哈希表隘马、B樹等數(shù)據(jù)結(jié)構(gòu)在機(jī)械磁盤太防、SSD等持久化介質(zhì)上的實(shí)現(xiàn)。單機(jī)存儲(chǔ)系統(tǒng)是單機(jī)存儲(chǔ)引擎的一種封裝...
    olostin閱讀 2,421評(píng)論 0 5
  • 近年來(lái)酸员,以LevelDB和Rocksdb為代表的LSM(Log-Structured Merge-Tree)存儲(chǔ)引...
    CatKang閱讀 1,990評(píng)論 0 3