【入門編】 テーブル設計の基本原則 – Cloud Spanner

やあ、エンジニアの世界へようこそ。Cloud Spannerという、少し背伸びした名前に出会って少し緊張しているかな?大丈夫、今日でその「難しそう」という壁は取り払ってしまおう。

Cloud Spannerは、いわば「世界中どこにいても全員で同時に書き込める、魔法の巨大な図書館」のようなものだ。普通のデータベースが「一人ずつ順番に並んで本を借りる」場所だとしたら、Spannerは「何万人もの司書が、世界中の支店で同時に本を整理して、一瞬で最新の状態を共有してくれる」システムなんだ。

今回は、この魔法の図書館に「どんな風に本(データ)を並べるか」という、最も大切な設計の話をしよう。

—

1. テーブル設計は「棚の作り方」だと思えばいい

Spannerのテーブル設計は、図書館の書棚を作る作業と同じだ。大切なのは、「何をメインの指標にするか」を決めること。

Spannerには「プライマリキー(主キー)」というルールがある。これは、「その棚にある本を、何で検索するか?」という背表紙のラベルのことだ。
例えば、「ユーザーID」をプライマリキーにすれば、IDを指定するだけで瞬時にその人の情報が取り出せる。逆に、何も考えずにラベルを適当に決めると、本を探すのに図書館中を走り回る羽目になる。ここが設計の肝なんだ。

2. Spannerで使える「魔法の箱(データ型)」たち

Spannerには、どんなデータでも整理できるように、いくつかの「箱(型)」が用意されている。これらを使いこなすのが、整理整頓の第一歩だよ。

  • STRING: 自由な文字列。名前や住所など、なんでも入る万能選手だね。
  • INT64 / FLOAT64: 数字の箱。INT64は整数のカウントに、FLOAT64は小数点を含む計算に使おう。
  • BOOL: 「はい」か「いいえ」か。単純だけど、システムのフラグ立てには欠かせない。
  • BYTES: 画像やファイルそのもの。バイナリデータというやつだ。
  • DATE / TIMESTAMP: 時間の管理。いつ何が起きたかを記録する、図書館のログには必須だ。
  • JSON: これが面白い。「構造が決まっていない情報」をそのまま放り込める袋のようなもの。
  • ARRAY: 「箱の中にさらに箱がある」状態。例えば「一人のユーザーが持つ複数の電話番号」を一つの行にまとめられる。これができるおかげで、Spannerは他のデータベースよりずっと効率的なんだ。

—

3. テーブルを作ってみよう(魔法の設計図)

実際にテーブルを作る様子を見てみよう。言葉で説明するより、コードを見るのが一番だ。

— ユーザー情報を管理するテーブルを作るよ
CREATE TABLE Users (
UserId INT64 NOT NULL, — ユーザーID(これが本を探すためのラベル!)
UserName STRING(100), — 名前(最大100文字まで)
Email STRING(MAX), — メールアドレス(長さは気にせず何でも入れられる)
IsActive BOOL, — アカウントが有効かどうか
CreatedAt TIMESTAMP, — 登録された日時
Tags ARRAY — タグのリスト(ARRAYの力!)
) PRIMARY KEY (UserId); — UserIdを軸にして棚を整理するよ

4. 初学者が陥りやすい「落とし穴」

ここで一つだけ、先輩として忠告しておきたいことがある。それは「プライマリキーの選び方」だ。

初心者がやりがちなのは、「連番(1, 2, 3…)」をプライマリキーにすること。一見綺麗に見えるけど、Spannerのような巨大なシステムでは、みんなが「最新の番号」に殺到してしまい、図書館の受付が混雑してしまうんだ。

もしやるなら、「UUID(ランダムな文字列)」を使うか、「ハッシュ値」を先頭に持ってくるなどの工夫が必要になる。これについては、また別の機会にじっくり話そう。今は「連番はちょっと気をつけてね」と覚えておくだけで十分だ。

—

最後に:ここをクリアすれば大丈夫

Cloud Spannerの設計は、「シンプルに始めること」が一番の近道だ。
「ARRAYでまとめられるデータはないか?」「検索の軸(プライマリキー)はこれで本当に効率的か?」と自分に問いかけるだけで、君の設計はぐっとプロに近づく。

最初は難しく感じるかもしれない。でも、この魔法の図書館を使いこなせれば、君が作るアプリは世界中のどんなアクセスにも負けない、強固な基盤を手に入れたことになるんだ。

今日のところは、このテーブル定義のイメージを頭の中で膨らませてみてほしい。また何かあればいつでも聞いてくれ。君のエンジニアとしての旅路を、心から応援しているよ。

コメント

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