【エルエスエムツリー】

LSMツリー とは?

💡 「まとめて書く」で書き込みを爆速にする、ログ型データ構造の革命。
📌 このページのポイント
LSM ツリー(Log-Structured Merge-Tree) 書き込み リクエスト MemTable メモリ上のバッファ 超高速書き込み フラッシュ (閾値超え) SSTable L0 新しいファイル群 SSTable L1 マージ済みファイル SSTable L2 さらにマージ・整理済み Compaction (バックグラウンド) ディスク(シーケンシャル書き込み) 採用データベース RocksDB LevelDB Cassandra HBase
LSMツリーはメモリへの書き込みとSSTableへのフラッシュ・Compactionで構成される
ひよこ ひよこ

LSMツリーって、普通のB木と何が違うの?

ペンギン先生 ペンギン先生

B木は読み書きのバランスを重視した構造だけど、LSMツリーは書き込みの速さに特化した構造なんだよ。SNSのいいね数やIoTのセンサーデータみたいに、書き込みが大量に来る場面で輝くんだ。

ひよこ ひよこ

どうやって書き込みを速くしてるの?

ペンギン先生 ペンギン先生

まずデータをメモリ上のMemTableに書くんだよ。メモリは超速いから瞬時に完了する。MemTableが一定サイズになったらSSTable(Sorted String Table)というファイルにまとめてディスクへ書き出すんだ。

ひよこ ひよこ

まとめて書くと何がいいの?

ペンギン先生 ペンギン先生

ディスクへの書き込みがシーケンシャル(順番通り)になるんだよ。ランダムに書くより順番に書く方がHDDSSDもずっと速いんだ。

ひよこ ひよこ

SSTableがどんどん増えたら読み込みが遅くならないの?

ペンギン先生 ペンギン先生

いい質問! それがLSMツリーの弱点でもあるんだよ。だからCompaction(コンパクション)という処理で、複数のSSTableマージして1つにまとめるんだ。古いデータや削除済みデータもここで整理されるよ。

ひよこ ひよこ

どんなデータベースで使われてるの?

ペンギン先生 ペンギン先生

RocksDB、LevelDB、Cassandra、HBaseなどが採用しているよ。特にRocksDBはFacebookが開発して、今では多くのDBの内部ストレージエンジンとして使われているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「LSMツリー」って出てきたら「書き込みを速くするために『まず書き溜め、後でまとめる』構造」と思えればだいたいOK!
📖 おまけ:英語の意味
「Log-Structured Merge-Tree」 = ログ構造マージツリー
💬 Log-Structured(ログ形式の書き込み)+Merge(マージ)+Tree(ツリー構造)の組み合わせだよ。1996年に論文で提唱されたデータ構造なんだ。
← 用語集にもどる