【入門編】 コンパクション処理 – Cloud Spanner

やあ、よく来てくれましたね。Cloud Spannerという、世界最強クラスのデータベースの扉を叩いた君の勇気を歓迎します。

私は、長年このSpannerという「巨大な知性の塊」と向き合ってきたアーキテクトです。今日は、Spannerがなぜ、膨大なデータを抱えながらも涼しい顔で高速に動き続けられるのか……その秘密の舞台裏である「コンパクション(Compaction)」についてお話ししましょう。

難しく考える必要はありません。これは、私たちが日常生活で行っている「整理整頓」と全く同じ、とても人間味のある仕組みなんですよ。

—

1. Spannerは「消しゴム」を使わない!?

まず、驚くべき事実をお伝えしましょう。Cloud Spannerは、データを更新したり削除したりする際、実は元のデータをその場ですぐに書き換えたり消したりはしません。

「えっ、じゃあどうするの?」と思いますよね。Spannerは、新しい情報を「付箋(ふせん)」のようにペタペタと上から貼っていくスタイルをとっています。

  • 更新: 「古いデータの上に、新しい内容を書いた付箋を貼る」
  • 削除: 「このデータはもう使わないよ、という印(墓標:Tombstoneといいます)を書いた付箋を貼る」

なぜこんな面倒なことをするのでしょう? それは、一度書いたデータを書き換えない(イミュータブルと言います)方が、分散システムでは圧倒的に「書き込み速度」を速くできるからです。

しかし、このままでは問題が起きます。付箋が増えすぎると、目当てのデータを探すのに何枚も付箋をめくらなければならず、読み取りが遅くなってしまうのです。

2. コンパクションは「深夜のノート整理」

そこで登場するのが、今回の主役「コンパクション」です。

コンパクションは、裏側でこっそり動いてくれる「整理整頓のプロ」です。バラバラになった付箋(SSTableと呼ばれるデータの塊)を回収して、一つの綺麗なノートにまとめ直してくれます。

具体的には、こんなことをしています:

1. 最新版だけを残す: 重なった付箋の中から、一番新しい情報だけを抜き出します。
2. ゴミを捨てる: 「削除印」がついた古いデータを、このタイミングで本当に消去します。
3. 並べ替える: データを順番通りにピシッと並べ直し、検索しやすくします。

この図を見てください。イメージが湧くはずです。

【整理前:バラバラの付箋】 【コンパクション後:一冊のノート】
[ID:1 名前:佐藤 (Ver.1)] ──┐
[ID:1 名前:鈴木 (Ver.2)] ──┼─→ [ID:1 名前:鈴木 (最新)]
[ID:2 (削除マーク) ] ──┘ (ID:2は消滅してスッキリ!)

この「ノートをまとめ直す作業」のおかげで、私たちはいつでも高速にデータを読み取ることができるわけです。

3. 「書き込み」と「読み取り」のバランス感覚

ここで、エンジニアとして少しだけ深い話をしましょう。

コンパクションを頻繁にやりすぎると、常にノートを書き直している状態になり、コンピュータのパワー(CPUやディスクの性能)を使い切ってしまいます。これを「書き込み増幅(Write Amplification)」と呼びます。

逆に、コンパクションをサボると、付箋だらけになって読み取りが遅くなります。これを「読み取り増幅(Read Amplification)」と呼びます。

Spannerの凄いところは、この「整理整頓の頻度」を、君の代わりに自動で、かつ完璧にコントロールしてくれる点にあります。君が眠っている間も、Spannerは「今は書き込みが少ないから、一気に整理しちゃおう」と賢く判断してくれるのです。

4. 実際に「整理」の影響を見てみよう(イメージ)

Spannerでは、コンパクションを直接コマンドで実行することはありません(すべて自動です)。しかし、大量のデータを削除した直後の「ストレージ使用量」を観察すると、その働きを感じることができます。

例えば、100GBのデータを削除したとしましょう。

— 1,000万行の古いログデータを削除したとする
DELETE FROM UserLogs WHERE event_date < '2023-01-01'; この直後、管理画面を見ても「ストレージ使用量」はすぐには減りません。
なぜなら、まだ「削除印という付箋」を貼っただけで、実際のノート整理(コンパクション)が終わっていないからです。

数時間後、コンパクションが進むと……

コンパクション前
Storage Used: 150GB (データ 100GB + 削除マーク 50GB)

コンパクション実行後(自動)
Storage Used: 50GB (不要なデータが物理的に消えてスッキリ!)

このように、時間差でディスクが空くのは、Spannerが裏で一生懸命「整理整頓」をしてくれた証拠なのです。

まとめ:ここをクリアすれば、Spannerの基本はバッチリです!

コンパクションは、一見地味なバックグラウンド処理に見えます。しかし、これがあるからこそ、Spannerは「無限にスケールする性能」と「一貫性」を両立できているのです。

  • Spannerは付箋(SSTable)でデータを管理する。
  • コンパクションは、付箋をまとめてノートを綺麗にする作業。
  • これによって、読み取り性能が維持され、不要なデータが消える。
  • すべてはSpannerが自動でやってくれるので、君は安心してコードを書けばいい。

この仕組みを理解した君は、もう単なる「ユーザー」ではなく、Spannerの心臓の鼓動を感じ取れる「アーキテクト」への第一歩を踏み出しました。

「データは消してもすぐには消えない。整理整頓の時間がくるのを待っているんだ」……そんな風に考えると、なんだかデータベースが少し身近に感じられませんか?

次は、この整理されたデータがどうやって世界中にコピーされていくのか、その魔法についてお話ししましょう。またいつでも聞きに来てくださいね。応援していますよ!

コメント

タイトルとURLをコピーしました