02_応用

セクション3 応用:データの保存 🔧🎯

このファイルは 🔧 実践(中堅)🎯 発展(シニア) レベル。 「どのストレージを選ぶか」「設計のベストプラクティス」「トレードオフ」「試験のひっかけ」に焦点を当てます。基礎概念は 01_基礎.md を参照。


3.1 ストレージ選定の意思決定ツリー【最重要】

この試験で最も得点に直結するのがストレージ選定です。次のツリーを丸暗記してください。

Q1. データは構造化されているか?
  │
  ├─ NO(画像・動画・ログ・バックアップ等の非構造化/ファイル)
  │     └─►【Cloud Storage】(必要ならBigLakeでBQから分析)
  │
  └─ YES(構造化/半構造化)
        │
        Q2. ワークロードは?
        │
        ├─ 分析・集計が中心(OLAP)
        │     └─►【BigQuery】(レイク上のまま分析したい → BigLake)
        │
        └─ トランザクション・更新が中心(OLTP)
              │
              Q3. データモデルは?
              │
              ├─ ドキュメント指向 + モバイル/Webのリアルタイム同期
              │     └─►【Firestore】
              │
              ├─ ワイドカラム / キー参照で大量・低レイテンシ・高スループット
              │     └─►【Bigtable】(時系列・IoT・ミリ秒応答・PB級)
              │
              └─ リレーショナル(SQL・ACID)
                    │
                    Q4. グローバル分散 + 水平スケール + 強整合が必要?
                    │
                    ├─ YES(グローバル無停止・大規模)
                    │     └─►【Spanner】
                    │
                    └─ NO(リージョナルで十分)
                          │
                          Q5. PostgreSQLで高性能 or 分析も同じDBで(HTAP)?
                          ├─ YES →【AlloyDB】
                          └─ NO  →【Cloud SQL】(MySQL/PostgreSQL/SQL Server)

  ※ 超低レイテンシのキャッシュが欲しい → 上記の前段に【Memorystore】

サービス特徴比較表(選定の早見)

サービス ワークロード 整合性 スケール レイテンシ SQL 代表ユースケース
Cloud Storage ファイル/レイク 強整合(オブジェクト) 無制限 × 非構造化・バックアップ・ステージング
BigQuery OLAP 強整合 PB級 秒(分析) 大規模分析・BI・BQML
Cloud SQL OLTP 強整合(ACID) リージョナル/垂直 Webアプリ・中小トランザクション
AlloyDB OLTP+分析 強整合(ACID) リージョナル(高性能) ◎(PG) PostgreSQL高負荷・HTAP
Spanner OLTP 強整合(ACID)・グローバル 水平・無制限 グローバル金融/在庫・無停止
Bigtable 大量読み書き 結果整合(単一行は強整合) PB級・水平 ミリ秒 ×(限定) 時系列・IoT・アドテク
Firestore OLTP(ドキュメント) 強整合 自動・水平 ×(独自) モバイル/Web・同期
Memorystore キャッシュ メモリ依存 サブミリ秒 × キャッシュ・セッション

🎯 選定でよく問われる対比


3.1(続き)コストとパフォーマンスの計画・ライフサイクル管理

🔧 GCS ライフサイクル管理(Object Lifecycle Management)

オブジェクトの年齢や条件に応じて自動でクラス移行・削除するルール。コスト最適化の定番。

ライフサイクルルールの例:
  作成から 30日経過 → Nearline へ移行
  作成から 90日経過 → Coldline へ移行
  作成から365日経過 → Archive へ移行
  作成から  7年経過 → 削除(保持義務終了後)

🎯 アクセスパターン分析からの選定

アクセスパターン 適した選択
書き込み多・1行更新・低レイテンシ OLTP系(Cloud SQL/AlloyDB/Spanner/Firestore)
大量スキャン・集計・アドホック分析 BigQuery
単純キーで超高スループット・ミリ秒 Bigtable
めったに読まないが消せない GCS Coldline/Archive
頻繁な再読み込み・サブミリ秒 Memorystore(キャッシュ層)

⚠️ 「分析クエリが遅い」と言われてBigtableを足すのは誤り。分析はBigQueryへ。Bigtableはキー参照のための低レイテンシストア。


3.2 BigQuery設計のベストプラクティス 🔧🎯

🔧 非正規化とネスト/繰り返しフィールド

🔧 パーティション+クラスタリングの設計指針

状況 設計
日付で範囲フィルタが多い 日付/タイムスタンプでパーティション
取り込み日で区切りたい 取り込み時刻パーティション(_PARTITIONTIME
特定列で頻繁に絞り込み/集計 その列でクラスタリング(最大4列)
パーティション列の候補が高カーディナリティで範囲も広い 整数範囲パーティション or クラスタリング中心

🎯 マテリアライズドビュー / BI Engine(性能の打ち手・詳細はセクション4)

🎯 スロットとコスト(詳細はセクション5)


3.1(深掘り)Bigtable設計のベストプラクティス 🔧🎯

Bigtableは行キーで1次元にソートされて分散格納される。性能の良し悪しは行キー設計でほぼ決まる

🔧 行キー設計の原則

⚠️ アンチパターン:ホットスポット

アンチパターン なぜ悪い 対策
行キー先頭がタイムスタンプ 最新書き込みが1ノードに集中(ホット) 先頭に識別子を置く/タイムスタンプを後ろへ
連番・単調増加IDを先頭 同上(末尾ノードに集中) ハッシュ化・ソルティングで分散
連番の逆順タイムスタンプを単独先頭 同上 フィールドプロモーション等と組合せ

🎯 フィールドプロモーション(Field Promotion)

時系列のホットスポットを避ける定番手法。**高カーディナリティな識別子を行キーの先頭に「昇格」**させ、その後ろにタイムスタンプを置く。

悪い: 20260528T1200#sensorA   ← 先頭が時刻 → 最新が1ノード集中(ホット)
良い: sensorA#20260528T1200   ← 先頭がセンサーID → 書き込みが分散
         └ フィールドプロモーション(IDを先頭に昇格)+ 時系列は後置

🔧 SSD vs HDD・サイジング

選択 特徴 使いどころ
SSD 低レイテンシ・高IOPS(推奨デフォルト) レイテンシ重視のオンライン参照
HDD 大容量・低コスト・高レイテンシ コールドな大容量バッチ・コスト優先

3.1(深掘り)Spanner設計のベストプラクティス 🎯

🎯 TrueTime と強整合

🎯 インターリーブ(Interleaving)

親テーブルの行に、関連する子テーブルの行を物理的に隣接配置する機能。

⚠️ Spannerのホットスポット回避


3.3 / 3.4 レイク・プラットフォームの設計判断 🔧🎯

🔧 BigLake の使いどころ

🔧 Dataplex によるレイク管理

🎯 データメッシュ × フェデレーテッドガバナンス


🎯 トレードオフ早見

トレードオフ 一方 他方
正規化 vs 非正規化 整合性・更新容易(OLTP) 読み取り高速(OLAP/BQ)
強整合 vs 結果整合 正確(Spanner/RDB) 高スループット・低レイテンシ(Bigtable)
SSD vs HDD(Bigtable) 低レイテンシ 大容量・低コスト
パーティション粒度 細 vs 粗 スキャン削減 断片化/上限のリスク
行キー 分散 vs 局所 ホットスポット回避 範囲スキャン効率
GCSクラス ホット vs コールド 読み取り安い 保存安い(取り出し高)
オンデマンド vs 容量予約 散発向き 大量・予測可能向き

🎯 統合シナリオ演習(考え方の練習)

シナリオ:グローバル展開するライドシェア企業。 ① 世界中の決済・配車トランザクションは強整合で、無停止・水平スケールが必須。 ② 車両から毎秒数百万件のGPSテレメトリが届き、ミリ秒で直近位置を引きたい。 ③ 過去全データをアドホックにSQL分析してBIダッシュボードを出したい。 ④ ドライバーがアップロードする本人確認書類の画像を保管(数年は保持、めったに参照しない)。 ⑤ 取り込み生データはレイクにそのまま貯め、部門ごとに所有しつつ全社で統制・発見可能にしたい。

設計の骨子(解答例)

  1. グローバル強整合トランザクション → Spanner(TrueTime)。主キーはハッシュ化してホットスポット回避、顧客×注文はインターリーブ
  2. 大量GPSテレメトリ・ミリ秒参照 → Bigtable(SSD)。行キーは vehicleID#reversed_timestamp 等のフィールドプロモーションで書き込み分散。
  3. アドホック分析・BI → BigQuery日付パーティション+vehicleIDクラスタリング、非正規化+ネスト構造。BIはBI Engine/マテビューで高速化。
  4. 本人確認画像(コールド長期保管)→ Cloud Storage。ライフサイクルで Standard→Coldline/Archive、保持期間後に削除。
  5. 生データレイク(GCS)を BigLake でBQから細粒度統制しつつ分析、Dataplex/Catalogで論理ゾーン化・発見性確保、部門所有はデータメッシュ+フェデレーテッドガバナンス、共有はAnalytics Hub

この「要件を軸でふるい分け、各サービスへ割り当てる」思考が本番のストレージ設計問題そのものです。


まとめ:このセクションの設計判断の型

03_要点と暗記.md で記憶を固めましょう。