【エスエステーブル】

SSTable とは?

💡 「書いたら絶対変えない」不変の辞書ファイルが高速DBを支えている
📌 このページのポイント
SSTable — LSMツリーの書き込みフロー Memtable (メモリ上ソート済み) apple → 100 banana → 200 cherry → 300 flush SSTable (新) apple → 150 ← 新しい値 banana → 200 SSTable (旧) apple → 100 cherry → 300 書いたら変更しない(イミュータブル) compaction SSTable (統合後) apple → 150 ✓ 最新値のみ banana → 200 cherry → 300 (重複・削除済み除去) 読み取り順序 新しいSSTable → 古いSSTable → Memtable の順に優先して検索
SSTable(LSMツリー)の書き込み・コンパクションフロー
ひよこ ひよこ

SSTableって初めて聞いたけど、どんなものなの?

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

キーがアルファベット順(昇順)に並んでいる、絶対に書き換えないディスクファイルだよ。辞書みたいにページが単語順に並んでいてパッと探せるイメージだね。

ひよこ ひよこ

「書き換えない」ってどういうこと?データを更新したいときはどうするの?

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

SStableは変更しないで、新しいSStableを作るんだよ。同じキーの新しい値が新しいファイルに書かれて、読むときは新しいファイルを優先する。古いデータはコンパクション(統合処理)のときにまとめて消すんだ。

ひよこ ひよこ

なんでわざわざ「書き換えない」設計にするの?

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

ディスクへのランダム書き込みはとても遅いからだよ。書き換えないなら、新しいデータはメモリに貯めてまとめてシーケンシャル(連続)書き込みできる。これがLSMツリーの考え方で、書き込みスループットが劇的に上がるんだ。

ひよこ ひよこ

コンパクションって具体的に何をするの?

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

時間が経つと古いSStableがどんどん増えるから、複数のファイルをマージしてひとつにまとめる作業だよ。同じキーの古いバージョンや削除済みデータを捨てて、読み取り効率を維持するんだ。

ひよこ ひよこ

どんなデータベースがSStableを使っているの?

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

Apache CassandraやRocksDB、LevelDB、ScyllaDBなどがSStableを使っているよ。どれも大量書き込みが得意なシステムで、ソーシャルメディアのタイムラインIoTデータの蓄積などに使われているんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「SSTable」って出てきたら「ソート済みのキーを持つ書き換え不可のディスクファイル」と思えればだいたいOK!
📖 おまけ:英語の意味
「SSTable (Sorted Strings Table)」 = ソート済み文字列テーブル
💬 「Sorted Strings Table」の略で、GoogleのBigtableの論文(2006年)で登場した用語だよ。「ソートされた文字列の表」というそのままの名前なんだ。
← 用語集にもどる