やあ、よく来てくれましたね。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の心臓の鼓動を感じ取れる「アーキテクト」への第一歩を踏み出しました。
「データは消してもすぐには消えない。整理整頓の時間がくるのを待っているんだ」……そんな風に考えると、なんだかデータベースが少し身近に感じられませんか?
次は、この整理されたデータがどうやって世界中にコピーされていくのか、その魔法についてお話ししましょう。またいつでも聞きに来てくださいね。応援していますよ!
コメント