【入門編】 SSTable形式 – Cloud Spanner

こんにちは。よく来てくれましたね。Cloud Spannerの世界へようこそ。

「Cloud Spannerのアーキテクチャ」なんて聞くと、なんだか難しそうな巨大な機械の設計図を想像してしまうかもしれません。でも、安心してください。その核心にある仕組みは、実は私たちの日常にある「ある工夫」と驚くほど似ているんです。

今日は、Spannerが膨大なデータを恐ろしいほどのスピードで読み書きできる秘密、「SSTable(Sorted String Table)」というデータ形式についてお話しします。

ここを理解できれば、Cloud Spannerがなぜ世界中のエンジニアに愛されているのか、その基本はバッチリマスターできますよ。

—

1. SSTableは「完璧に整理された図書カード」

想像してみてください。あなたは世界最大の図書館の司書です。毎日、何万冊もの本が新しく届き、同時に何万人もの人が本を借りに来ます。

もし、本を届いた順番にバラバラに棚に突っ込んでいたらどうなるでしょう? 誰かが「『吾輩は猫である』を探して!」と言ったとき、あなたは図書館の端から端まで走り回らなければなりません。これでは仕事になりませんよね。

そこで、あなたは「図書カード」を作ることにしました。
それも、ただのカードではありません。

1. 五十音順(Sorted)に並んでいて、
2. 一度書いたら絶対に書き換えない(Immutable)

というルールで作られたカードです。これが、Spannerのデータの持ち方であるSSTable(ソート済み文字列テーブル)の正体です。

2. なぜ「書き換えない」のが最強なのか?

「えっ、データを更新するときに書き換えないの?」と驚かれるかもしれません。普通、ノートに書いた文字を直すときは消しゴムで消しますよね。

しかし、コンピュータの世界、特にSpannerのような超巨大なシステムでは、「すでにあるデータを書き換える」という行為は、実はとてもコスト(手間)がかかることなんです。

Spannerはこう考えます。
「古いデータを消しゴムで消す時間はもったいない。新しいデータは、新しいカードとして一番上に重ねてしまおう!」

これが「LSMツリー」と呼ばれる構造の基本的な考え方です。

データの追加・更新のイメージ

例えば、ユーザーの住所を更新する場合を見てみましょう。

— 1回目:佐藤さんの住所を「東京」で登録
INSERT INTO Users (ID, Name, Address) VALUES (1, ‘佐藤’, ‘東京’);

— 2回目:佐藤さんの住所を「大阪」に更新
UPDATE Users SET Address = ‘大阪’ WHERE ID = 1;

このとき、Spannerの裏側(SSTable)ではこんなことが起きています。

【SSTable 1枚目(古い)】
ID:1, Name:佐藤, Address:東京

【SSTable 2枚目(新しい)】
ID:1, Name:佐藤, Address:大阪 <-- これが最新! 読み取るときは、「一番新しいカード」だけを見ればいいので、古いデータを消す手間を省きつつ、常に最新の状態を知ることができるんです。賢いでしょう?

3. SSTableの「並び順」が読み取りを加速させる

SSTableの「S」は「Sorted(ソート済み)」です。データが常に整列していることが、読み取り効率を最大化します。

例えば、「IDが100番から200番までのユーザーを全員表示して」というリクエストが来たとき、データがバラバラだと探すのが大変ですが、並んでいれば「ここからここまで!」と一気に束で取り出すことができます。

これを専門用語で「スキャン」と呼びますが、Spannerはこのスキャンがめちゃくちゃ速いんです。

4. 溜まったカードはどうするの?(コンパクション)

「でも先輩、新しいカードをどんどん重ねていったら、カードの山がすごいことになりませんか?」

その通り。鋭いですね!
カードが増えすぎると、今度は「最新のカードを探す」のに時間がかかってしまいます。

そこでSpannerは、裏側でこっそり「カードの整理整頓(コンパクション)」を行います。

  • 古いカードと新しいカードを読み合わせる。
  • 同じデータの古い方は捨てて、最新のものだけをまとめる。
  • また新しく「完璧に整列した1枚の大きなカード」を作り直す。

この作業をバックグラウンドで自動的にやってくれるので、私たちは何も気にせず、いつでも高速な読み取りの恩恵を受けられるのです。

まとめ:Spannerの「優しさ」に触れる

SSTableという仕組みのおかげで、Spannerは以下の3つを同時に実現しています。

1. 書き込みが速い: 古いデータを消さず、新しいカードを置くだけだから。
2. 読み取りが速い: データが常に整列していて、どこにあるかすぐわかるから。
3. 壊れにくい: 一度書いたデータ(SSTable)は変更しないので、管理がとてもシンプルになるから。

難しそうに見える「物理データフォーマット」の話も、こうして紐解いてみると、効率を極限まで高めるための「お片付けの知恵」の結晶であることがわかりますね。

「データを大切に、かつ効率よく扱う」。
これがCloud Spannerの根底に流れる哲学です。

このSSTableの仕組みをイメージしながらSpannerを触ってみてください。きっと、今までよりもずっと Spannerのことが身近に感じられるはずですよ。

もし途中でわからなくなったら、いつでも聞きに来てくださいね。一歩ずつ、一緒にマスターしていきましょう!

コメント

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