【入門編】 データシャーディングとスプリットポイント – Cloud Spanner

こんにちは!クラウドの世界へようこそ。
今日は、Googleが誇る最強のデータベース「Cloud Spanner(クラウド・スパナー)」の、一番ワクワクする心臓部についてお話しするね。

データベースって聞くと、「なんだか難しそう」「巨大なエクセルみたいなもの?」って思うかもしれない。うん、最初はそれで全然OK!
でも、Cloud Spannerがすごいのは、「世界中に広がる、めちゃくちゃ大きくて、絶対に止まらない超巨大な本棚」みたいなものなんだ。

今日は、その巨大な本棚がどうやって片付けられて、どうやってスイスイ動いているのかの秘密――「データシャーディングとスプリットポイント」について、専門用語をできるだけ使わずに、僕と一緒に紐解いていこう。

ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ!それじゃあ、いってみよう!

—

1. 巨大な本棚と「ダンボール箱」の話

想像してごらん。君が世界中で大人気の本屋さんを経営しているとする。
最初は小さな棚一つだったから、本を五十音順に並べておけば楽勝だった。

「あ行」「か行」「さ行」……ってね。

でも、ある日、世界中から注文が殺到して、「あ」のつく本だけでトラック10台分になっちゃった!
さあ、どうする? 一つの棚に全部の「あ」を詰め込もうとしたら、棚がバキッと壊れちゃうよね。店員さんも、お目当ての本を探すのに一日中走り回ることになる。

ここでデータベースの世界的な悩みが出てくる。
「データが増えすぎて、一つのコンピュータの限界を超えちゃう問題」だ。

普通のデータベースなら、ここで「これ以上は入りません!」って泣き寝入りするか、人間が頑張ってデータを手動で分割しなきゃいけなかった。
でも、Cloud Spannerはここからが天才的なんだよ。

—

2. Cloud Spannerの必殺技:「スプリットポイント」とは?

Cloud Spannerは、データが増えてくると、自動的にこう判断する。

> 「おっと、この棚のエリア、ちょっと重たくなってきたな。真ん中でパカッと半分コに分けて、別の新しい棚に引っ越させよう!」

この、「どこでデータをパカッと分けるか」の境界線のことを、エンジニアの世界でスプリットポイント(分割点)って呼ぶんだ。

日常の例で言えば、辞書を思い浮かべてみて。
辞書が分厚くなりすぎたら、「『さ』の途中の『し』のページあたりで、上下の2冊に分けよう!」って決めるよね。あの「どこで分けるか」を決める瞬間がスプリットポイントさ。

Cloud Spannerは、このスプリットポイントを人間が指示しなくても、自分で勝手に見つけてくれる。これが「動的な負荷分散」の正体なんだ。

データは「スプリット」という名の小箱に分かれる

Cloud Spannerの中では、データは「スプリット(Split)」と呼ばれる小さなダンボール箱に綺麗に詰められて管理されている。
箱がいっぱいになると、自動的に新しいスプリットポイントが引かれて、箱が2つにパカッと割れる。これをスプリット(分割)と呼ぶんだ。

—

3. 引越し屋さんはどう動く? スプリットの移動プロセス

さて、データがパカッと分かれて、新しいダンボール箱(新しいスプリット)ができたとする。
でも、そのままだと元のコンピュータのままだから、やっぱりそのコンピュータが重たくなっちゃうよね。

だから、Cloud Spannerは引越しをするんだ。この引越しのプロセスがまた美しくて感動しちゃう。

1. お引越しの相談(準備)
「このダンボール箱、ちょっと重いから、あっちの空いている立派なコンピュータの部屋に引っ越そうか」と、Cloud Spannerの頭脳(オーケストレーションシステム)が判断する。
2. 荷物のコピー(安全第一)
いきなり荷物を全部持って出ていくわけじゃない。まずは、そのダンボール箱の中身の「コピー」を、引っ越し先のコンピュータにそっくりそのまま送るんだ。この間も、元の箱の本の貸し出し(読み書き)は続けられるよ。すごくない?お店を営業しながら引っ越ししちゃうんだ。
3. 最後のバトンタッチ(切り替え)
コピーが完了したら、ほんの一瞬だけ「はい、これからの注文受付はこっちの新しい部屋ね!」と看板を掛け替える。
4. お片付け
古い方の部屋にあったダンボール箱は、「お疲れ様!」って言ってキレイに片付けられる。

この一連の流れが、システムを止めることなく、すべて自動で行われるんだ。僕たちエンジニアは、コーヒーを飲みながら「お、今日も元気に引っ越ししてるな」って眺めているだけでいい(実際はモニタリングしてるけどね!)。

—

4. 初学者のための「やっちゃいけない罠」:ホットスポット

ここで、先輩からちょっとした実務の裏技(アドバイス)を教えておくね。

Cloud Spannerは自動でスプリットを作ってくれる万能選手なんだけど、人間のちょっとした意地悪で、うまくスプリットが作れなくなっちゃうことがあるんだ。

それが「ホットスポット(熱い点)」という現象。

例えば、データベースに新しいデータを保存するときに、IDの番号として「現在の時間(タイムスタンプ)」をそのまま使ったとするよね。そうすると、

  • 12:00:01 のデータ
  • 12:00:02 のデータ
  • 12:00:03 のデータ

……と、常に「一番最後(今この瞬間)」の場所にだけ、世界中からの書き込みが集中することになる。

これだと、Cloud Spannerが「あ、ここをパカッと分けたいのに、すべての注文が『今この瞬間』の1箇所に集中しすぎて、どこで切っても片方が激重になっちゃうよ!」と困っちゃうんだ。ダンボールの同じ場所にみんなが群がって、誰もそこから動けない状態だね。

対策:データを綺麗にバラす工夫

だから、実務でCloud Spannerを使うときは、IDの最初に「ランダムな数字」をちょっと混ぜたり、データを綺麗に散らす工夫(これを「プレフィックスの分散」なんて言ったりするよ)をするんだ。
そうすると、スプリットポイントがあちこちにきれいに引かれて、世界中のコンピュータが均等に働いてくれるようになる。

—

まとめ:Cloud Spannerの優しさを感じよう

どうだったかな?
Cloud Spannerのデータシャーディングとスプリットポイントの仕組み、イメージできたかな?

  • データが増えたら、自動でダンボール箱(スプリット)に分ける。
  • どこで分けるかの境界線が「スプリットポイント」。
  • 重たくなったら、お店を閉めずに(無停止で)別のコンピュータに引っ越しさせる。

Cloud Spannerは、まるで「空気を読んで自分でテキパキと仕事を分担し合う、優秀なスタッフたちが集まったチーム」なんだ。

この仕組みを知っていれば、今後どれだけ巨大なサービスを作ることになっても、「データが増えたらどうしよう……」なんて夜も眠れなくなる心配はないよ。Spannerが裏で全部、エレガントに片付けてくれるからね。

ここをクリアした君なら、もうCloud Spannerの「分散の魔法」の核心を理解したも同然だ。
自信を持って、次のステップへ進もう!応援しているよ!

コメント

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