【入門編】 ディレクトリベースの配置 – Cloud Spanner

こんにちは!クラウドの世界へようこそ。
今日は、世界中の巨大なシステムを裏から支える怪物級のデータベース「Cloud Spanner(クラウド・スパナー)」の、一番おいしくて一番大切な心臓部――「ディレクトリベースの配置」についてお話ししますね。

「なんだか難しそうな名前だな…」と思いましたか?
大丈夫。ここをクリアすれば、Cloud Spannerの基本はバッチリマスターできますよ!

難解な数式や専門用語は置いておいて、まずは私たちの身近な「ある場所」に例えて、その本質を優しく解きほぐしていきましょう。

—

1. 例え話:巨大な図書館の本の並べ方

想像してください。あなたは、世界で一番大きな「超巨大図書館」の館長です。
この図書館には、世界中から毎日何億冊もの本(データ)が届きます。

もし、届いた順に適当な棚へ本を放り込んだらどうなるでしょう?
「ハリー・ポッター」の1巻は1階の隅っこ、2巻は3階の裏通り、3巻は地下室……なんてことになったら、読者が3巻を読むために館内を何往復もしなきゃいけませんよね。これでは探すのに時間がかかりすぎて、図書館は大パニックです。

優秀な館長であるあなたなら、どうしますか?
そう、「同じシリーズの本や、関連する本は、必ず同じ棚の、すぐ隣に並べる」はずです。

  • 「ハリー・ポッター」シリーズは、棚Aの1番地。
  • 「料理のレシピ本」は、棚Bの5番地。

この「関連するものをまとめて、近くの特等席に並べるグループ」こそが、Cloud Spannerでいう「ディレクトリ(Directory)」の正体です。

—

2. Cloud Spannerの頭の中:なぜ「近くに置く」ことがそんなに凄いの?

Cloud Spannerは、世界中にデータを分散させて保管する「超・分散データベース」です。
データがあちこちに散らばっているからこそ、地球の裏側と通信するような「距離の壁」が生まれます。

データベースの世界で一番の悪者は誰だと思いますか?
それはエラーではありません。「ネットワークの移動時間(レイテンシ)」です。CPUがどんなに速くても、データが遠くにあれば、届くまでに時間がかかります。

ここで「ディレクトリベースの配置」がスーパーマンのように登場します。

例えば、「ユーザー情報」とそのユーザーが書いた「ブログのコメント」があるとします。
人間がアプリを使うとき、「ユーザーのプロフィール」を見た直後に「その人のコメント一覧」を見ることが多いですよね。

ここで、Cloud Spannerに「このユーザーとコメントは、セットの家族(同じディレクトリ)なんだよ!」と教えてあげると、Spannerは物理的に全く同じサーバー(ハードディスクの同じエリア)に並べてデータを置いてくれます。

結果どうなるか?
データを取ってくるための「旅の距離」がゼロ(または数ミリメートル単位)になり、画面が爆速で表示されるようになるんです。

—

3. 具体的にどう使うの?(初心者向けのコードの雰囲気)

言葉だけだとフワッとしてしまうので、少しだけ雰囲気を覗いてみましょう。
Cloud Spannerでは、データを作るときに「この親(親ディレクトリ)の子供ですよ」という関係性(インターリーブ:Interleave)を定義してあげます。

これがいわゆる、データを同じ場所にまとめる魔法の呪文です。

— 1. 親となる「ユーザー」テーブル(これが大元のディレクトリの拠点になります)
CREATE TABLE Users (
UserId INT64 NOT NULL,
UserName STRING(100),
) PRIMARY KEY(UserId);

— 2. 子となる「コメント」テーブル
— 「INTERLEAVE IN PARENT」という呪文で、Usersのすぐ隣(物理的に同じ場所)に配置させます!
CREATE TABLE Comments (
UserId INT64 NOT NULL,
CommentId INT64 NOT NULL,
CommentText STRING(MAX),
) PRIMARY KEY(UserId, CommentId),
INTERLEAVE IN PARENT Users ON DELETE CASCADE;
— ※ON DELETE CASCADEは、親(ユーザー)が消えたら子(コメント)も一緒に綺麗に片付ける優しいお掃除機能です。

この設定をしておくと、`UserId = 100` の人のデータを取るとき、Spannerは世界中のサーバーを探し回ったりしません。「あ、100番ね。このサーバーのこの引き出しに入ってるよ」と、一瞬で取り出せるのです。

—

4. 先輩エンジニアからのアドバイス:気をつけるべき「落とし穴」

ここまで聞くと「じゃあ、全部のデータを一つのディレクトリにまとめちゃえば最強じゃん!」と思うかもしれませんが、ちょっと待ってください。ここが腕の見せ所です。

もし、世界中の全ユーザーのデータを「たった1つの巨大なディレクトリ」に詰め込んだらどうなるでしょう?
その特定の棚の前にだけ、世界中からアクセスが殺到して、棚が壊れてしまいますよね(これを「ホットスポット」と呼びます)。

  • まとめすぎると、一箇所に負荷が集中する。
  • バラバラにしすぎると、通信に時間がかかる。

この絶妙なバランスを取るのが、プロのアーキテクチャ設計です。
「ユーザーID」や「テナントID」など、『アプリケーションで一緒に検索される単位』ごとに、程よい大きさのディレクトリをいくつも作ってあげるのが、Cloud Spannerを極める王道の手法なんです。

—

おわりに

いかがでしたか?
「ディレクトリベースの配置」なんて言われると、何か宇宙船の操縦パネルみたいで難しそうに聞こえますが、本質は「よく一緒に使うものは、同じ引き出しに仲良く片付ける」という、机の整理整頓と同じなんです。

この仕組みを味方につければ、どんなにデータ量が増えても、世界中どこからアクセスされても、ビクともしない超高性能なシステムを作ることができます。

基礎の基礎はこれでバッチリです!
さあ、自信を持って次のステップへ進みましょう。あなたのエンジニアライフを、心から応援しています!

コメント

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