やあ。Cloud Spannerという、とてつもない可能性を秘めたデータベースの世界へようこそ。
多くのデータベースは「家」を建てる時、一度完成したら壁を動かすのに家全体を解体しなければならないような不便さがある。しかし、Cloud Spannerは違う。「住みながら、隣に新しい部屋を増築し、さらにはリビングを広げ続ける」ことができるんだ。
今日は、そんなSpannerの魔法のような機能、「オンラインスキーマ更新」の本質を、君と一緒に紐解いていこう。
—
「止まらない」という究極の贅沢
一般的なデータベースでテーブルに新しい列(カラム)を追加しようとすると、システムを一時停止(メンテナンスモード)にする必要があることが多い。ユーザーが使っている最中に「工事中」の看板を出すのは、現代のサービスでは致命的だよね。
Cloud Spannerは「オンラインスキーマ更新」という仕組みを持っている。これは、何千台ものサーバーが世界中で動き続けている最中に、裏側でこっそりと設計図を書き換えていく神業だ。
例え話:巨大な図書館の改装
君が巨大な図書館の館長だと想像してほしい。毎日何万人もの利用者が本を借りている。その最中に、「新しい棚を設置したい」「本を分類するタグを増やしたい」という要望が出たとする。
- 普通のDB: 「一度閉館します!全員退館してください!」と言って鍵をかける。
- Cloud Spanner: 「どうぞそのまま読書を続けてください」と言いながら、深夜の警備員が目にも止まらぬ速さで、利用者の邪魔にならないように新しい棚を組み立てる。
これが、Spannerが提供する「止まらない」という価値の正体だ。
—
どうやって「止まらない」を実現しているのか?
Spannerの内部では、スキーマの変更は「非同期」で行われる。
1. 指示を出す: 管理者が「このテーブルに列を増やして」と命令する。
2. 合意をとる: Spannerは世界中に分散しているサーバー間で、「今からこの設計図を新しくするよ」という合意形成を行う。
3. じわじわ反映: すべてのサーバーが「了解した」となると、裏側でバックグラウンド処理として、少しずつ新しい列を有効にしていく。
この間、システムは一度も停止しない。まさに、時速300kmで走る新幹線の車両を、走らせながら連結・切り離しするような職人芸なんだ。
—
守るべき「たった一つのルール」:制限事項
「魔法のように何でもできる」と言いたいところだが、技術に魔法はない。エンジニアとして、ここだけは心に刻んでおいてほしい。
「やりすぎは禁物」
いくらオンラインで更新できるとはいえ、何百ものテーブルを一度に更新したり、巨大なテーブルに複雑なインデックスを同時に何個も追加したりすれば、Spannerも「ちょっと待ってくれ、整理するのに時間がかかる」と悲鳴を上げる。
- 一度にやる変更は小さく: 「列の追加」と「不要なインデックスの削除」を一度にやらず、一つずつ丁寧に適用すること。
- バックグラウンド処理の負荷: インデックスの作成は、裏側で全データを読み込んで整理する作業を伴う。データ量が数テラバイトあるなら、数分で終わるわけがない。ここを理解せずに「遅い!」と怒るのは筋違いというものだ。
—
実践:スキーマを変更してみよう
Google Cloudのコンソールからポチポチするのもいいけれど、エンジニアならSQLで叩くのがかっこいい。こんな風に書くんだ。
— テーブルに新しい列を追加する魔法の呪文
ALTER TABLE Users ADD COLUMN PhoneNumber STRING(20);
— コメント: これを実行しても、ユーザーは誰一人としてエラーに遭遇しない。
— Spannerが裏でひっそりと「Users」テーブルの設計図をアップデートしてくれるんだ。
もし君が「やっぱりこの列、名前を変えたい」と思ったら、こうする。
— 列の名前を変更する
ALTER TABLE Users RENAME COLUMN PhoneNumber TO ContactNumber;
— 注意: 変更の内容によっては、アプリケーション側のプログラムも修正が必要になる。
— 「データベースだけ更新して、プログラムの修正を忘れる」のが一番怖い事故だからね。
—
さあ、君もSpannerの達人へ
Cloud Spannerのオンラインスキーマ更新は、単なる機能じゃない。「ビジネスの成長を止めてはいけない」という強い意志が具現化したものだ。
ここをマスターすれば、「メンテナンスのために夜中に起きてサーバーを止める」なんていう、前時代的な苦労から解放される日が必ず来る。
まずは、小さなテーブルで実際に列を追加・削除してみることから始めてみてほしい。恐れることはない。Spannerは、君が正しく扱えば、期待以上の仕事で応えてくれる最高の相棒になるはずだ。
次は、インデックスの最適化について深く語り合おうか。準備ができたら、またおいで。応援しているよ。
コメント