PCA 合格対策

Deep Dive: Storage & Database

Professional Cloud Architect 試験で問われるストレージ&DB全領域を、公式ドキュメントベースで技術深掘りします。GCS / Filestore / Cloud SQL / AlloyDB / Spanner / BigQuery / Bigtable / Firestore / Memorystore / Persistent Disk / Hyperdisk を、SLA・クォータ・アンチパターン・コスト設計まで完全網羅。

💾 全 18 章 📊 SLA・最小保持期間・IOPS 完全網羅 🎯 試験頻出パターン付き 📚 公式 21 ドキュメント参照 ⚠️ アンチパターン詳説 🔑 コスト事故回避ガイド
🔧 設計判断 🎯 試験頻出 ⚠️ アンチパターン 📋 クォータ ✅ ベストプラクティス
🔑 TL;DR — このページの結論 ストレージ選定は「データ構造 × アクセスパターン × スケール × 整合性」の 4 軸で即決します。
オブジェクト= GCS(Lifecycle / Autoclass / Bucket Lock)。
ファイル NFS= Filestore(Zonal/Regional/Enterprise)。
ブロック= Hyperdisk(新世代・性能独立スケール)か PD(既存互換)。
OLTP リレーショナル小〜中規模= Cloud SQL(MySQL/PG/SQL Server、HA は同期 RPD、RTO 約 60 秒)。
PG 高性能= AlloyDB(Columnar Engine + Reader Pool 最大 20 ノード)。
グローバル強整合・水平スケール OLTP= Spanner(TrueTime、Regional 99.99% / Multi-region 99.999%)。
DWH/分析= BigQuery(Storage + Compute 分離、On-demand or Editions)。
低レイテンシ大規模 KV/時系列= Bigtable(HBase 互換、行キー設計が命)。
モバイル SDK・リアルタイム= Firestore Native(Datastore mode は API 互換維持専用)。
キャッシュ/セッション= Memorystore(Redis Cluster / Valkey)。
最大の事故源は BigQuery の SELECT *Bigtable のタイムスタンプ先頭 row keySpanner の単調増加プレフィックスGCS の連番ファイル名。これらは必ず回避してください。

📚 参照する公式ドキュメント

本資料は以下の Google Cloud 公式ドキュメント(2026 年時点)から技術詳細・制限・SLA・ベストプラクティスを抽出しています。各章で都度引用と URL を併記します。

1ストレージ全体像 — 7 つの分類

Google Cloud のデータストアは、形(オブジェクト・ファイル・ブロック)クエリ特性(KV・リレーショナル・ドキュメント・分析)速度(永続・キャッシュ)の組合せで 7 カテゴリに分類できます。試験では「データ構造」と「整合性要件」と「スケール特性」の 3 つで一意に絞り込めるよう、各カテゴリの代表サービスを最初に頭に入れます。

1.1 7 カテゴリと代表サービス(SVG 図解)

① Object Storage 非構造化データ、HTTP API Cloud Storage (GCS) Standard / Nearline / Coldline / Archive Bucket Lock / Lifecycle / Autoclass ② File Storage (NFS) POSIX、共有マウント Filestore Basic / Zonal / Regional / Enterprise NFSv3 全 tier / NFSv4.1 一部 tier ③ Block Storage VM の OS / DB ボリューム PD / Hyperdisk / Local SSD Hyperdisk Balanced/Throughput/Extreme/ML Local SSD は揮発性 ④ Relational (OLTP) ACID、SQL、JOIN Cloud SQL MySQL / PostgreSQL / SQL Server AlloyDB(PG 強化版) Spanner(グローバル強整合) ⑤ NoSQL スキーマレス、水平スケール Bigtable(ワイドカラム KV) 大規模 KV / 時系列 / IoT Firestore(ドキュメント) モバイル/Web リアルタイム ⑥ Data Warehouse 列指向、分散クエリ BigQuery Storage + Compute 分離 Dremel エンジン / Capacitor 列形式 Petabyte 級も対応 ⑦ In-Memory Cache 低レイテンシ、揮発前提 Memorystore Redis / Redis Cluster / Valkey / Memcached セッション / レート制限 / リーダーボード ⑧ データ移行ツール(補助) Database Migration Service (homogeneous + heterogeneous, CDC) Datastream — Oracle/MySQL/PG → BigQuery のサーバーレス CDC Storage Transfer Service — S3/Azure Blob/オンプレ NFS → GCS Transfer Appliance — 60 TB 以上の物理ディスク輸送(TA40/TA100/TA300) BigQuery Data Transfer Service — Google Ads/YouTube/SaaS
図 1-1:GCP データストアの 7 カテゴリ+移行ツール群。試験では 「データ構造(形)× アクセスパターン × 規模」から 1 カテゴリに絞り込む練習が肝心です。

1.2 データ構造で即決する判定表

データの形第一候補代替典型用途
画像 / 動画 / バックアップ / ログファイルGCS静的アセット、データレイク
POSIX 共有ファイル(NFS マウント)FilestoreGCS Fuse(読み中心の場合のみ)レンダリング、HPC、ML 学習データ
VM のブロックボリュームHyperdisk / PDLocal SSD(揮発許容のみ)OS、DB、キャッシュディスク
JOIN 多い OLTP(〜数 TB)Cloud SQLAlloyDB(PG 高負荷)SaaS バックエンド、ECサイト
グローバル ACID、TPS 数万+Spanner金融、グローバル EC、グローバル SaaS
大規模 KV / 時系列 / メトリクスBigtableIoT センサー、広告クリック、財務 tick
モバイル/Web のリアルタイム同期Firestore (Native)チャット、コラボツール、IoT 制御
分析 / DWH / レポートBigQueryBI、ML 学習、Ad-hoc 分析
セッション・キャッシュMemorystoreレート制限、リーダーボード、JWT 検証
🎯 試験での出題パターン(章1) 問題文で「JSON ドキュメント」「モバイル SDK で直接アクセス」と来たら Firestore、「列指向」「BI ツール接続」と来たら BigQuery、「時系列で書き込み秒間百万行」と来たら Bigtable と、キーワードで反射的に絞り込めるよう訓練します。

2ストレージ選定 完全決定フロー

試験シナリオでは「グローバル展開」「ACID 必須」「秒間 100 万 QPS」「<10 ms レイテンシ」など複数条件が同時に提示されます。以下のメイン決定ツリーを暗記し、矛盾する条件があった時の判断軸まで身につけます。

2.1 メイン決定ツリー(SVG 図解)

START どんなデータ? Q1: 構造化データ? (Yes→Q2, No→Q1b) No (非構造化) POSIX 必要? YES→Filestore NO→GCS Yes (構造化) Q2: トランザクション(ACID)必要? No Q3: 分析クエリ中心? YES→BigQuery NO→規模 / レイテンシ要件? 巨大KV/時系列→Bigtable モバイル/Doc →Firestore Yes (ACID) Q4: グローバル分散 / 数 TB 超? YES→Spanner NO→PG で高負荷? YES→AlloyDB NO→Cloud SQL
図 2-1:データ形 → ACID 要件 → 規模・分析要件の順に絞り込みます。「グローバル ACID」が出てきた瞬間に Spanner 一択。「分析クエリ」と言われたら BigQuery 一択。

2.2 整合性・スケールの 4 象限マップ

スケール / 整合性強整合性結果整合性 / なし
単一リージョン Cloud SQL / AlloyDB / Firestore (Native) Memorystore(永続化なし)
マルチリージョン Spanner(外部強整合)/ Firestore Multi-region Bigtable Multi-cluster Routing / GCS Multi-region
⚠️ よくある誤解 — マルチリージョン強整合性 「マルチリージョンで強整合性」が必要なら Spanner しか選択肢がありません(Bigtable も Firestore も Multi-region 構成で結果整合性に近い動作になります)。試験で「グローバル」「強整合性」「ACID トランザクション」の 3 語が並んだら、Spanner と即答してください。

2.3 規模・コスト感の早見表

サービス規模上限の目安コスト感(小規模時)コスト感(大規模時)
Cloud Storage無制限圧倒的に安い($0.02/GB/月〜)Lifecycle で更に削減可能
Cloud SQL64 TB / 数百 GB RAMスタータ $7〜/月HA で 2 倍、Read Replica で更に増
AlloyDBマネージドで PB クラスまで最小 2 vCPU〜(数百ドル/月〜)Cloud SQL より高速 → 単価高でも TCO 安
Spanner無制限(水平スケール)100 PU = $65/月〜(旧 1 ノードは高額)PU 単位で精密スケール可能
BigQueryPB クラス対応On-demand $6.25/TB スキャンEditions で予約 → コスト固定化
BigtablePB クラス対応最低 1 ノード(数百ドル/月)スケール時の単価効率が良い
Firestore無制限無料枠あり、Reads/Writes 課金高 RPS で意外と高額に
Memorystore1 GB〜数百 GB時間課金RAM サイズに比例
💡 ベストプラクティス — まず GCS、次に検討 生データは 必ず GCS に保管し、必要に応じて分析用に BigQuery にロードする、というアーキテクチャがコスト最適です。「データレイク = GCS、データウェアハウス = BigQuery」の二層構造が GCP の鉄板パターン。

2.4 試験での出題パターン(章2)

🎯 頻出キーワード → サービス即答リスト
  • 「グローバル ACID」「TrueTime」「99.999% SLA」→ Spanner (Multi-region)
  • 「列指向」「Petabyte 分析」「SQL での DWH」→ BigQuery
  • 「秒間 100 万書き込み」「時系列メトリクス」「HBase 互換」→ Bigtable
  • 「モバイル SDK で直接アクセス」「リアルタイム同期」「オフラインキャッシュ」→ Firestore Native
  • 「7 年間改ざん不可で保管」「SEC 17a-4」「FINRA」→ GCS + Bucket Lock
  • 「NFS 共有」「POSIX」「HPC レンダリング」→ Filestore
  • 「ML 学習データを 2,500 VM が同時読み」→ Hyperdisk ML

3Cloud Storage 完全解剖

Cloud Storage (GCS) は GCP の最も基盤的なサービスで、Organization → Project → Bucket → Object という階層を持ちます。試験では「ストレージクラス選定」「Lifecycle 設計」「Bucket Lock の不可逆性」「IAM vs ACL」「署名付き URL」「VPC Service Controls との連携」が頻出です。

「Buckets are containers to store your objects ... Objects are immutable piece[s] of data consisting of a file of any format.」 — Cloud Storage overview

3.1 ストレージクラス完全比較

クラス最小保持期間取り出し料金多リージョン/2リージョン SLAリージョン SLA想定アクセス頻度用途例
Standard なし なし 99.95% 99.9% ホット(頻繁) Web アセット、データレイク、リアルタイム ETL
Nearline 30 日 あり 99.9% 99.0% 月 1 回以下 月次レポート用元データ、月次バックアップ
Coldline 90 日 あり(高め) 99.9% 99.0% 四半期 1 回以下 四半期監査用ログ、災害復旧用バックアップ
Archive 365 日 あり(最高) 99.9% 99.0% 年 1 回未満 規制対応の長期保管、7-10 年ログアーカイブ
99.95%
Standard MR SLA
30/90/365日
最小保持 (NL/CL/AR)
11 nines
耐久性(全クラス)
無制限
バケット当たりオブジェクト数
⚠️ 早期削除料金(Early Deletion Fee) Nearline / Coldline / Archive は最小保持期間より前にオブジェクトを削除・上書き・クラス変更すると、「残り日数分の保管料」を課金されます。たとえば 30 日保持の Nearline に置いた直後に削除すると、丸 30 日分の保管料が請求されます。Lifecycle で頻繁にクラスを行き来させる設計は危険。

3.2 ロケーション 3 種(Region / Dual-region / Multi-region)

Region

単一リージョン

1 リージョン内の複数ゾーンで冗長化。最も低料金で低レイテンシ。リージョン障害時は不可用。

SLA: Standard 99.9% / その他 99.0%

: asia-northeast1

Dual-region

2 リージョン

指定した 2 つの近接リージョン間で同期。Turbo Replication でアジア-米のような遠距離も対応。

SLA: Standard 99.95% / その他 99.9%

: asia1, nam4

Multi-region

大陸単位

大陸(asia, eu, us)の複数リージョンに冗長化。グローバル CDN ライクな低レイテンシ。最も堅牢で最も高額。

SLA: Standard 99.95%

: asia, eu, us

🔑 試験頻出 — Compute と同リージョン BigQuery / Dataflow / Dataproc 等の計算サービスは、同じロケーションに置いた GCS バケットからしか直接読めない場合があります(クロスリージョン読込はネットワーク料金が発生)。「BigQuery で分析する元データ」を保管する GCS は、必ず BigQuery データセットと同じロケーションに置きます。

3.3 Object Lifecycle Management(OLM)

Lifecycle Policy は「条件(Age / NewerVersions / IsLive 等)が一致したらアクション(Delete / SetStorageClass / AbortIncompleteMultipartUpload)を実行する」というルール集です。サポートされるアクションと条件を正確に覚えると、試験で出る Lifecycle ベース問題は全問正解できます。

「Lifecycle rules apply Delete, SetStorageClass, or AbortIncompleteMultipartUpload actions when conditions like age, createdBefore, numNewerVersions, isLive, or matchesStorageClass match.」 — Object Lifecycle Management

3.3.1 サポートされる 3 つのアクション

アクション動作注意点
Deleteオブジェクトを削除Versioning 有効バケットでは「ライブ → 非現行」になる。Retention Policy 未達/Hold あれば実行されない
SetStorageClassクラスを変更(例: Standard→Nearline→Coldline→Archive)Class A operation として課金。Delete が SetStorageClass より優先される
AbortIncompleteMultipartUpload不完全な Multipart Upload を破棄「アップロード失敗のゴミ」がコスト垂れ流しになるのを防止。全バケット必須設定と言ってよい

3.3.2 サポートされる 10 個の条件

条件説明
ageオブジェクトが作成されてからの経過日数
createdBefore指定日付より前に作成
customTimeBeforeCustom Time メタデータが指定日付より前
daysSinceCustomTimeCustom Time から経過日数
daysSinceNoncurrentTime非現行になってからの経過日数
noncurrentTimeBefore非現行になった日が指定日付より前
isLive現行版か非現行版か
numNewerVersionsこのオブジェクトより新しい版が N 個以上ある
matchesPrefix / matchesSuffixオブジェクト名の前方/後方一致
matchesStorageClass指定クラスに保管されている
📋 Lifecycle ルールの制限 公式仕様:「全ルール合計で prefix と suffix の総数は 1000 まで」。設定変更の反映は最大 24 時間。アクションは非同期で実行されるため、条件成立から実際の削除/変更まで数時間の遅延を見込みます。
📖 典型的な Lifecycle 設定例(JSON)

「30 日 Standard → 90 日 Nearline → 365 日 Coldline → 7 年 Archive → 削除」というクラシックなコスト最適化ポリシー:

{
  "lifecycle": {
    "rule": [
      {
        "action": {"type": "SetStorageClass", "storageClass": "NEARLINE"},
        "condition": {"age": 30, "matchesStorageClass": ["STANDARD"]}
      },
      {
        "action": {"type": "SetStorageClass", "storageClass": "COLDLINE"},
        "condition": {"age": 90, "matchesStorageClass": ["NEARLINE"]}
      },
      {
        "action": {"type": "SetStorageClass", "storageClass": "ARCHIVE"},
        "condition": {"age": 365, "matchesStorageClass": ["COLDLINE"]}
      },
      {
        "action": {"type": "Delete"},
        "condition": {"age": 2555}
      },
      {
        "action": {"type": "AbortIncompleteMultipartUpload"},
        "condition": {"age": 7}
      }
    ]
  }
}

このポリシーを gcloud storage buckets update gs://my-bucket --lifecycle-file=policy.json でアタッチします。

3.4 Autoclass — 自動クラス遷移

Autoclass は「アクセスパターンが予測不能なバケット」向けに、オブジェクト単位でアクセス頻度を監視し、自動的にクラスを上下させる機能です。Lifecycle と違って「アクセスされたら Standard に戻す」逆方向の動きもします。

3.4.1 Autoclass の動作(公式仕様)

初期クラス
「All objects added to the bucket begin in Standard storage」— アップロード指定を無視して必ず Standard で開始
遷移(Terminal=Nearline)
30 日アクセスなし → Nearline。アクセスされたら Standard に戻る
遷移(Terminal=Archive)
30 日 → Nearline、90 日 → Coldline、365 日 → Archive。Standard への復帰も自動
128 KiB 未満の除外
「Objects smaller than 128 KiB don't transition」— 永久に Standard。コスト計算で見落としがち
取り出し料金
「Retrieval fees are not charged except as part of enablement charges」— 通常時は取り出し料金なし
管理料金
「Management fee plus enablement charge applies」— オブジェクト数に応じた管理料金が別途課金

3.4.2 Autoclass vs Lifecycle どちらを選ぶか

✅ Autoclass 向き

アクセス頻度が予測不能、データの「冷温」が分からない、外部スキャンが少ない、運用工数を削減したい。「とりあえずバケットに置いておけばクラスは自動で最適化される」状態を作りたい場合に最適。

❌ Autoclass 不向き

「大半のデータがホット or 大半がコールド」と分かっているケース(Lifecycle で明示制御の方がコスト最適)。外部サービスが定期的にバケット内を全件スキャンするケース(アクセス検出で Standard に戻ってしまう)。Lifecycle で SetStorageClass/matchesStorageClass を使いたい場合(共存不可)。

⚠️ Autoclass のコスト事故 Autoclass バケットを「毎日全件スキャンするバッチ」(例: GCS Fuse の ls -R、外部監視ツール)に晒すと、すべてのオブジェクトが Standard に戻ってしまい、コスト削減効果が消失します。管理料金だけが余計に乗る最悪パターン。Autoclass を有効化する前に、「バケットを全件読みするジョブが存在しないか」必ず確認してください。

3.5 Bucket Lock — 規制対応の不可逆ロック

Bucket Lock は、バケットの Retention Policy(保持期間)を「永久に減らせない」状態にする機能です。SEC 17a-4、FINRA、CFTC、HIPAA、医療業界の長期保管規制への対応に使われます。

「You can lock the bucket's retention policy, permanently preventing the policy from being reduced or removed.」 — Bucket Lock

3.5.1 Retention Policy の挙動

3.5.2 関連機能との違い

機能用途解除可能?
Retention Policy(未ロック)ポリシー単位の保持期間可能
Retention Policy + Bucket Lock規制対応の不可逆保持不可(永久)
Object Hold(Event-based)イベント単位の一時保持可能
Object Hold(Temporary)個別オブジェクトの一時保持可能
Object Versioning上書き・削除の世代保管可能
Soft Delete(デフォルト 7 日)誤削除の保護可能(リカバリ)
⚠️ Bucket Lock の落とし穴 ロック直後に 「実は 1 年で良かったのに 10 年でロックしてしまった」事故が頻発します。ロック後はバケット内全オブジェクトが保持満了するまで「バケット削除も不可」「プロジェクト削除も不可(リーンが付与される)」となります。ロック前に --retention-period必ず QA 環境で 1 週間運用してから本番適用するのが鉄則。

3.6 セキュリティ機能まとめ

機能概要選定基準
IAMバケット / プロジェクト / オブジェクト単位の権限基本。roles/storage.objectViewer
ACL(非推奨)オブジェクト単位の細粒度権限レガシー互換のみ、新規は IAM
Uniform Bucket-level AccessACL を無効化し IAM 一本化本番では必ず有効化
CMEKCloud KMS で管理する暗号化キー規制要件、キーローテーション制御
CSEK顧客が自前で持ち込む暗号化キー究極の管理権限が必要なケースのみ
Signed URL時限付き署名で外部に一時公開サインアップなしで限定公開ダウンロード
VPC Service Controls境界を作って exfiltration を防止機密データ・PHI/PII
Bucket IP Filtering送信元 IP 制限本社 IP のみアクセス許可など
Object Versioning上書き / 削除の世代保管誤操作対策
Soft Delete削除後 7 日(既定)で復元可能誤削除対策(既定で ON)
💡 ベストプラクティス — 本番バケット 5 点セットUniform Bucket-level Access 有効、②CMEK、③Object Versioning ON、④Lifecycle で AbortIncompleteMultipartUpload + 古い版の自動削除、⑤Audit Logging(Data Read/Write)有効。さらに機密データなら VPC Service Controls 境界に加える。

3.7 試験での出題パターン(章3)

🎯 章 3 頻出問題
  • 「コストを最小化したい、10 年に 1 回だけアクセスする監査ログ」→ Archive(最小 365 日)
  • 「7 年間絶対に削除されてはいけない」→ Bucket Lock + Retention Policy 7 年
  • 「アクセスパターンが完全に予測不能」→ Autoclass(外部全件スキャンがないことを確認)
  • 「BigQuery で頻繁に分析する元データ」→ Standard、BigQuery と同リージョン
  • 「グローバルユーザーへの静的アセット配信」→ Multi-region (US/EU/ASIA) + Cloud CDN
  • 「外部パートナーに 1 日だけダウンロード許可」→ Signed URL(IAM ロール付与は過剰)

4GCS パフォーマンス設計

GCS は内部で「オブジェクト名でハッシュ → 自動シャーディング」していますが、連番・タイムスタンプ先頭のファイル名は同一シャードに集中させてしまい、1 秒あたりの書き込み QPS が頭打ちになります。試験では「アップロード QPS が伸びない」「ホットスポット」というキーワードで頻出。

4.1 ホットスポット回避(命名規則)

❌ アンチパターン — 連番 / タイムスタンプ先頭

同じプレフィックスに集中して書き込みが発生:

logs/2026-05-28-001.json
logs/2026-05-28-002.json
logs/2026-05-28-003.json
...(同じ prefix なので 1 つのシャードに集中)

結果:QPS が伸びず、503 / レイテンシ悪化が発生。

✅ ベストプラクティス — ハッシュプレフィックス

ファイル名の先頭にハッシュ(または UUID 先頭 4 文字)を挿入:

3a/logs/2026-05-28-001.json
7f/logs/2026-05-28-002.json
b2/logs/2026-05-28-003.json
...(プレフィックス分散 → 並列シャード)

これで秒間数千 QPS まで自動スケール可能。

公式ガイドより:「Use a hash prefix at the start of object names to evenly distribute high request rates across multiple servers.」 — Request rate and access distribution

4.2 アップロード方式の使い分け

方式適サイズ特徴使うケース
Simple Upload 〜5 MB 1 リクエストで完結 小さなテキスト、設定ファイル
Multipart Upload (XML API) 5 MB〜5 TB S3 互換、複数パートで並列 S3 互換コードからの移植
Resumable Upload 大ファイル全般 中断から再開可能 不安定なネットワーク、大容量バックアップ
Parallel Composite Upload 数 GB〜数 TB 分割アップロード後にサーバ側で結合 巨大ログ、データセットの一括投入
Storage Transfer Service 1 TB+ ジョブベース、S3/Azure からも可 マルチクラウド移行、定期同期
Transfer Appliance 60 TB+ / 帯域不足 物理ディスクを輸送 1 週間以上かかる転送

4.3 Parallel Composite Upload の仕組みと注意点

gsutil -o GSUtil:parallel_composite_upload_threshold=150M cp big.tar gs://... のようなコマンドで、ローカルファイルを N 分割して並列アップロードし、サーバ側で compose API により 1 つのオブジェクトに結合する仕組みです。

⚠️ Composite Upload の制限
  • 結合元の各パートは個別オブジェクトとして一時保存される(後でクリーンアップが必要)
  • 1 つの composite object に含められるソースは最大 32 個
  • 結合後のオブジェクトには CRC32C のみが利用可能(MD5 は利用不可)
  • Autoclass バケット / Bucket Lock バケット では使用不可(または制限あり)
  • CMEK との組合せは可能だが、全パート同じ KEK を使う必要あり

4.4 Premium Network Tier と Cloud CDN 連携

GCS の URL(例: storage.googleapis.com/bucket/object)は Premium Tier の Anycast 経由でグローバル配信されます。さらに静的サイト/Web アセット配信なら、Global External Application Load Balancer + Cloud CDN でエッジキャッシュを効かせるのが定石です。

User (JP) User (US) グローバル Cloud CDN POP エッジキャッシュ Global Ext App LB + Cloud Armor GCS Bucket (Multi-region) Standard / Backend Bucket バケットに Backend Bucket 設定 → CDN 有効化 → エッジキャッシュ Hit でレイテンシ < 50 ms
図 4-1:静的アセット配信の鉄板構成。GCS 単体での直接公開ではなく、Cloud Armor で WAF を効かせ、CDN でレイテンシとオリジン負荷を最適化します。

4.5 試験での出題パターン(章4)

🎯 章 4 頻出問題
  • 「秒間 5000 オブジェクトのアップロードで 503 が頻発」→ 命名規則を見直す(ハッシュプレフィックス)
  • 「100 GB ファイルを高速アップロード」→ Parallel Composite Upload or gsutil/gcloud storage cp -m
  • 「全世界に静的アセット配信、レイテンシ最小」→ Multi-region バケット + Global Ext App LB + Cloud CDN
  • 「60 TB のオンプレデータを 1 週間で移行、帯域なし」→ Transfer Appliance
  • 「アップロードが頻繁に中断する大ファイル」→ Resumable Upload

4.X GCS 事故ケース集

本番運用で頻出する GCS の事故シナリオです。一般化したパターンとして、設計レビューのチェックリストに使えます。

🚨 事故ケース 1: バケット誤公開で顧客個人情報が検索エンジンに index 化
状況開発者がデモ用に allUsersStorage Object Viewer を付与。バケット名がブログ記事から推測され、半年後に Google 検索でヒット。
原因allUsers/allAuthenticatedUsers 付与の禁止ポリシー(Org Policy iam.allowedPolicyMemberDomains)未設定。② Uniform Bucket-Level Access 無効でオブジェクト ACL も併用されており把握不能。
影響個人情報数十万件流出、報告義務発生、信用毀損。
復旧① IAM から allUsers 即時削除。② Cloud Logging の Data Access Log(要事前有効化)からアクセス IP 一覧抽出。③ Google 検索キャッシュ削除リクエスト。
再発防止Org Policy で外部公開禁止 + storage.publicAccessPrevention=enforced + Uniform Bucket-Level Access + 定期的な IAM Recommender 確認。
🚨 事故ケース 2: Lifecycle 誤設定で監査ログ 1 年分を即時削除
状況ストレージコスト削減のため Lifecycle ルールを書いたが、age > 30 条件のつもりが「age < 30 以外を削除」のような誤った組合せ条件で 1 年分の監査ログを Delete に判定。
原因① Lifecycle のテスト環境での dry-run なし。② Object Versioning 無効。③ Bucket Lock もなし。
影響SOX/PCI-DSS 監査で証跡欠落。罰金対象。
復旧削除済みオブジェクトは Versioning 無効なので復旧不能。代替として CMEK で暗号化されていない他リージョンのスナップショットを必死に探す。
再発防止監査ログのバケットは Bucket Lock + Retention Policy(例: 7年)を必須。Lifecycle 変更は IaC + Pull Request レビュー + dry-run。
🚨 事故ケース 3: アプリのバグで全オブジェクト上書き、Versioning 無効で復旧不能
状況デプロイミスでアプリが空ファイルを既存オブジェクト名で大量 PUT。Versioning 無効のため上書き=旧データ消滅。
原因① Object Versioning 無効。② Soft Delete(2023 以降の新機能)未有効化。
影響本番データ全消失、サービス停止。
復旧Soft Delete 有効なら 7 日以内に gcloud storage objects restore。それも無ければ DR バケットからリストア。
再発防止本番バケットは Versioning + Soft Delete(最小 7 日推奨)を必ず有効化。Cross-region のレプリカもしくは Storage Transfer の定期コピーで二重化。
🚨 事故ケース 4: Customer-Supplied Encryption Key(CSEK)紛失で全データ復号不能
状況CSEK 鍵を社内 Wiki にメモしていたが、Wiki 移行時に鍵情報を紛失。Google は CSEK を保管しないため復号不能。
原因① CSEK の運用責任(鍵管理)を顧客が負うことの理解不足。② 鍵バックアップなし。
影響暗号化されたオブジェクト全件が永久に読めない。
復旧不可。
再発防止CSEK ではなく CMEK(Cloud KMS 管理)を使用する。CMEK ならローテーション・監査・冗長化が自動。CSEK が必須要件以外は使わない。
🚨 事故ケース 5: 異リージョン間 Egress で 1 ヶ月の請求が数百万円
状況US リージョンのバケットを Asia の Dataflow ジョブから毎時参照。Egress 料金が月数百万円。
原因① バケットとコンピュートのリージョン不一致。② Multi-region との違いを誤認識。
影響予期せぬ高額請求。
復旧同リージョンに新バケットを作成し、Storage Transfer で移動。
再発防止Budget Alert(閾値超過で SNS/Slack 通知)と、Recommender の「Cross-region egress detected」を監視。

4.Y GCS 運用・保守ベストプラクティス

領域項目推奨設定
バックアップObject Versioning本番バケット必須、保持 30 日推奨
Soft Delete2024年以降デフォルト有効、7〜90 日
Cross-region コピーStorage Transfer Service で日次レプリカ
モニタリングRequest Count / Error Ratestorage.googleapis.com/api/request_count
BandwidthEgress 増加を Budget Alert で検知
Access LogData Access Audit Log 有効化
保持Retention Policy監査ログは Bucket Lock + 7 年
Lifecycle変更は IaC、dry-run + PR レビュー
📋 gcloud / gsutil 運用コマンド集
# Soft Delete 設定(保持 30 日)
gcloud storage buckets update gs://my-bucket --soft-delete-duration=30d

# Versioning 有効化
gcloud storage buckets update gs://my-bucket --versioning

# Retention Policy + Bucket Lock(変更不可)
gcloud storage buckets update gs://logs-bucket --retention-period=7y
gcloud storage buckets update gs://logs-bucket --lock-retention-period

# Public Access Prevention 強制
gcloud storage buckets update gs://my-bucket --public-access-prevention

# 削除済みオブジェクト復元(Soft Delete)
gcloud storage objects restore gs://my-bucket/path/file.txt --generation=1234567890

# Lifecycle dry-run(ローカル JSON で検証)
gcloud storage buckets update gs://my-bucket --lifecycle-file=lifecycle.json

5Cloud SQL 詳細 — マネージド RDB

Cloud SQL は MySQL / PostgreSQL / SQL Server を Google が運用するマネージドサービスです。試験では「HA(High Availability)構成」「Read Replica」「PITR(Point-in-Time Recovery)」「Cloud SQL Auth Proxy」「IAM 認証」「自動メンテナンス」が頻出です。Spanner を選ぶ前の標準的な選択肢として位置付けられます。

5.1 主要スペック早見表

項目MySQLPostgreSQLSQL Server
主要バージョン5.6 / 5.7 / 8.0 / 8.49.6 〜 162017 / 2019 / 2022 (Enterprise/Standard/Web/Express)
最大ストレージ64 TB64 TB64 TB
最大 vCPU96 (Enterprise Plus は 128)9696
最大 RAM624 GB+ (Enterprise Plus)624 GB+624 GB+
HA SLA99.95%(Enterprise+)99.95%(Enterprise+)99.95%
Single Zone SLA99.5%99.5%99.5%
Read Replica10 個 + Cascading同左同左
PITR対応(バックアップ + WAL)対応対応

5.2 Edition の差分(Enterprise / Enterprise Plus)

Enterprise

標準エディション

これまでの Cloud SQL を継承。HA 構成で 99.95% SLA、最大 96 vCPU、ストレージ 64 TB。多くのワークロードはこちらで十分。

追加機能: Backup 自動化、自動メンテナンス、Cloud SQL Auth Proxy

Enterprise Plus

高性能エディション

低レイテンシ(書込最大 3 倍、読込最大 3 倍)、データキャッシュ(書込書き戻し付き)、Near-Zero Downtime メンテナンス(<10 秒)、最大 128 vCPU、864 GB RAM。

適合: 厳格 SLA、24/7、メンテナンス影響を最小化したい本番系

5.3 High Availability(HA)構成 — 内部動作

「The configuration provides data redundancy through synchronous replication to each zone's persistent disk. ... You can expect the instance to be unavailable for about sixty seconds」 — Cloud SQL HA

5.3.1 HA フェイルオーバーの仕組み(SVG)

Region: asia-northeast1 Zone A (Primary) Cloud SQL Instance (MySQL/PG/SQL Server) Regional Persistent Disk 同期レプリケーション Static IP / Heartbeat 1 秒間隔でヘルスチェック 複数失敗 → フェイルオーバー Zone B (Standby) Cloud SQL Instance 読込クエリは受けない(接続不可) Regional Persistent Disk 同期コピー(同じ内容) Failover 時: ≈ 60 秒で起動 同じ Static IP を引き継ぐ 既存接続は切断 → 再接続必要 同期レプリケーション
図 5-1:Cloud SQL HA は同一リージョン内の 2 ゾーンに Regional Persistent Disk で同期書込。Primary のヘルスチェック失敗で 約 60 秒でフェイルオーバー。Standby は読込クエリを受けません。

5.3.2 HA の重要メトリクス

≈ 60 秒
フェイルオーバー RTO
≈ 0 秒
RPO(同期レプリ)
2 倍
HA のコスト
99.95%
HA SLA
⚠️ RPO=0 は理論値、実際は数秒のラグも 公式は「同期レプリケーション」と表現していますが、PITR からの復旧(DML 障害シナリオ)では RPO 5 分以下と明記されています。完全な RPO=0 を要求するシステムでは Spanner(複数リージョン)を検討してください。Cloud SQL は「ハードウェア障害から守る HA」であって、「ヒューマンエラーや論理破壊から守る DR」ではないことに注意。

5.4 Read Replica(読込スケール)

「Limit the number of direct read replicas of your primary instance to 10 or fewer.」 — Cloud SQL Replication

❌ アンチパターン

Read Replica を「フェイルオーバー先」として使う設計。Read Replica は自動フェイルオーバー機能を持ちません。プライマリ障害時に「Replica を昇格」する操作は手動で、しかも RPO 数分〜数十分のラグが発生する可能性があります。

✅ ベストプラクティス

HA(高可用性)は 必ず Cloud SQL HA 構成(Regional PD 同期)で実現する。Read Replica は「読込スケール」「分析用」「DR の補助」として位置付け、本番系の自動フェイルオーバーには含めない。クロスリージョン DR は Read Replica + 手動 promote で実現するが、RPO/RTO は事前にテストすること。

5.5 PITR・バックアップ

機能概要保持期間
自動バックアップ日次フルバックアップ1〜365 日(既定 7 日)
オンデマンドバックアップ任意タイミング明示削除まで
PITR (MySQL/PG)WAL/Binlog を 7 backups 分保持バックアップ保持と連動
Cross-Region バックアップ別リージョンに保存選択可
クローンバックアップ不要でコピー作成
⚠️ PITR の落とし穴 — Binlog 保持期間 「If replication is interrupted for longer than Cloud SQL replication logs are preserved (seven backups), you must delete the replica and create a new one.」 — つまり Read Replica が長時間停止すると修復不可能になり、再構築(数時間〜数日)が必要です。Replica の監視アラートは必須。

5.6 Cloud SQL Auth Proxy と IAM 認証

本番では Public IP は使わず、必ず Private IP + Cloud SQL Auth Proxy を使うのが推奨です。Auth Proxy は IAM 認証情報を使って認可された IAM プリンシパルのみ DB 接続を確立できる仕組みで、パスワードレス DB 接続を実現します。

Cloud SQL Auth Proxy
クライアントサイドで動く小さなプロキシ。Google ID トークンで認証し、TLS 暗号化されたトンネルで Cloud SQL に接続
Cloud SQL Connector
言語ライブラリ(Python/Java/Go/Node)。アプリに組み込んで Auth Proxy 同等の機能を提供
IAM 認証
DB ユーザーとして IAM プリンシパル(user/service account)を使い、パスワード管理を不要に
Private Service Access
VPC から Cloud SQL の Private IP に直接接続するための予約レンジ(/24 以上)
VPC Peering
Cloud SQL は内部的に Google が管理する VPC に存在し、ユーザー VPC と Peering で接続
📖 Cloud SQL Auth Proxy の起動コマンド例
# インスタンス接続名を確認
gcloud sql instances describe my-instance --format="value(connectionName)"
# 出力例: my-project:asia-northeast1:my-instance

# Auth Proxy をローカル起動
./cloud-sql-proxy my-project:asia-northeast1:my-instance \
  --port=5432 \
  --auto-iam-authn

# アプリは localhost:5432 に接続するだけ
psql "host=127.0.0.1 port=5432 sslmode=disable dbname=mydb user=my-sa@my-project.iam"

IAM 認証なので パスワード不要。Service Account に roles/cloudsql.client + roles/cloudsql.instanceUser が必要。

5.7 Maintenance Window と Maintenance Reschedule

5.8 試験での出題パターン(章5)

🎯 章 5 頻出問題
  • 「99.95% SLA、ゾーン障害を自動復旧」→ Cloud SQL HA 構成
  • 「読込負荷が高い」→ Read Replica(最大 10) or AlloyDB 検討
  • 「リージョン障害から復旧したい」→ Cross-Region Read Replica + 手動 promote
  • 「アプリにパスワードを書きたくない」→ Cloud SQL Auth Proxy + IAM 認証
  • 「Public IP は使いたくない」→ Private IP + VPC Peering(Private Service Access)
  • 「メンテナンスダウンタイムを 1 秒以下にしたい」→ Enterprise Plus Edition

5.9 Cloud SQL 事故ケース集

🚨 事故ケース 1: 自動バックアップ無効で OS パッチ後にデータロス
状況テスト用に作ったインスタンスを本番昇格させた際、自動バックアップが OFF のまま。Maintenance Window で OS パッチが当たり、ファイルシステム異常で全データ消失。
原因① 自動バックアップ未有効。② PITR(バイナリログ)も未有効。③ 「テスト用デフォルト」を本番にコピー。
影響1 週間分のトランザクションロス、サービス停止 48 時間。
復旧アプリログから手動で再構築(不完全)。
再発防止本番作成時の必須チェックリスト:自動バックアップ ON + PITR ON + リテンション 7 日以上 + HA 有効。Terraform モジュール化して人為ミスを排除。
🚨 事故ケース 2: 単一ゾーンインスタンスでゾーン障害時に 6 時間ダウン
状況コスト削減のため HA を OFF にしていた本番 DB。ゾーン障害発生、Google による復旧待ちで 6 時間サービス停止。
原因HA 構成(standby を別ゾーンに)未設定。
影響SLA 補償対象外(HA なしの SLA は 99.95% ではなく 99.5%)、機会損失。
復旧Cross-region Read Replica を昇格させる手順を実施したが、レプリカ遅延分のデータロス。
再発防止本番は必ず HA 有効化(standby を別ゾーン)。SLO ベースで HA コストを正当化。
🚨 事故ケース 3: Long-running Transaction で Replication Lag が膨張、フェイルオーバー時にデータロス
状況夜間バッチが 4 時間の巨大トランザクションを実行。Read Replica にバイナリログが届かず lag が 4 時間に。タイミング悪くプライマリ障害発生。
原因① Long-running Transaction の存在。② Replication Lag のアラートなし。
影響レプリカ昇格時に 4 時間分のデータが欠落。
復旧バイナリログを別途取得して手動 apply。
再発防止バッチはチャンク分割(commit 単位を小さく)。cloudsql.googleapis.com/database/replication/replica_lag でアラート設定(閾値 60 秒)。
🚨 事故ケース 4: Public IP + 弱パスワードで侵害、ランサムウェアでデータ暗号化
状況Cloud SQL を Public IP で公開、0.0.0.0/0 許可 + パスワード admin123。総当りで侵害され、DB を別の場所にコピー後、元 DB を全削除しランサム要求。
原因① Public IP + Authorized Networks 0.0.0.0/0。② 弱パスワード。③ IAM 認証未利用。
影響個人情報流出 + 業務停止。
復旧自動バックアップから復元(前日分のみ)。
再発防止Private IP + Cloud SQL Auth Proxy + IAM 認証を必須化。Org Policy で Public IP 禁止(sql.restrictPublicIp)。
🚨 事故ケース 5: Maintenance Window 未設定で営業時間中の自動再起動
状況本番 DB のメンテナンスウィンドウを設定せず Google デフォルトで運用。日本時間 14:00 にメジャー版アップグレードで 5 分停止、決済処理失敗多発。
原因Maintenance Window 未設定。デフォルトは Google が任意のタイミングで実施。
影響営業時間中のダウン、顧客クレーム。
復旧—(自動復旧)
再発防止Maintenance Window を業務時間外(例: 日本時間 03:00-04:00 日曜)に設定。Deny Maintenance Period でセール期間を保護。Enterprise Plus なら near-zero downtime。

5.10 Cloud SQL 運用・保守ベストプラクティス

領域項目推奨
バックアップ自動バックアップ毎日、保持 7〜30 日
PITR(バイナリログ / WAL)必須、保持 7 日
Export to GCS週次、Bucket Lock + Retention 1 年
HA / DRHA(regional)本番必須、RTO 約 60 秒
Cross-region Read ReplicaDR 用、Manual promote
モニタリングCPU Utilization> 80% で警告
Memory Utilization> 85% で警告
Disk Utilization> 80% で警告(auto-resize 推奨)
Replication Lag> 60 秒で警告
Active Connections上限の 80% で警告
パッチMaintenance Window業務時間外固定
Deny Maintenance Periodセール期間など最大 90 日延期可
📋 Cloud SQL 運用 gcloud コマンド集
# HA 有効化(regional)
gcloud sql instances patch my-db --availability-type=REGIONAL

# 自動バックアップ + PITR
gcloud sql instances patch my-db \
  --backup-start-time=03:00 \
  --enable-bin-log \
  --retained-backups-count=30 \
  --retained-transaction-log-days=7

# Maintenance Window 設定
gcloud sql instances patch my-db \
  --maintenance-window-day=SUN \
  --maintenance-window-hour=3

# Deny Maintenance Period
gcloud sql instances patch my-db \
  --deny-maintenance-period-start-date=2026-11-23 \
  --deny-maintenance-period-end-date=2026-12-31 \
  --deny-maintenance-period-time=03:00:00

# PITR で 1 時間前に復元
gcloud sql instances clone my-db my-db-restored \
  --point-in-time='2026-05-28T05:00:00.000Z'

# Cross-region Read Replica 作成
gcloud sql instances create my-db-replica \
  --master-instance-name=my-db \
  --region=us-east1

6AlloyDB for PostgreSQL

AlloyDB は PostgreSQL 完全互換でハイパフォーマンス版の位置付けです。Cloud SQL PostgreSQL は「コンピュート + ストレージが密結合」ですが、AlloyDB は 分散ストレージ層 + コンピュート層を完全に分離し、Reader Pool で読込を最大 20 ノードに水平スケール、Columnar Engine で HTAP(OLTP + OLAP)を高速化します。

「AlloyDB uses disaggregated architecture separating compute and storage layers ... Primary instance contains either two nodes (HA) or one node (basic). Read pool instances can contain up to 20 nodes total.」 — AlloyDB overview

6.1 アーキテクチャ(SVG 図解)

AlloyDB Cluster (Region) Compute Layer Primary Instance 2 nodes (HA) または 1 読込 + 書込 Columnar Engine ML 連携 (Vertex AI) 自動 Failover Read Pool A 最大 20 ノード合計 読込のみ 自動ロードバランス 水平スケール Read Pool B 用途別に分離可能 レポート用 / 分析用 / 別ワークロード Secondary Cluster 別リージョン Cross-Region DR 非同期レプリ 手動 Promotion Distributed Storage Layer(コンピュート分離) • Log-Structured Storage に書込 → 自動 3 ゾーン冗長化 • 読込はキャッシュ層からブロック単位で取得 • PB クラスまで自動スケール、ストレージは独立して伸縮 • Compute と分離 → 障害時の影響を局所化
図 6-1:AlloyDB の分離アーキテクチャ。Primary に書き込まれた変更は 分散ストレージ層 で 3 ゾーン冗長化され、Read Pool は同じストレージから直接読みます。

6.2 Cloud SQL PG との決定的な違い

項目Cloud SQL for PGAlloyDB
コンピュート/ストレージ密結合分離(disaggregated)
Read Replica最大 10 個(個別インスタンス)Read Pool 最大 20 ノード(プール化)
HA SLA99.95%99.99%
Columnar Engineなしあり(HTAP)
パフォーマンス標準トランザクション約 4 倍、分析クエリ最大 100 倍
AI/ML 統合限定AlloyDB AI(vector / scann / google_ml_integration)
Cross-Region DRRead Replica で実現Secondary Cluster(非同期)
最小コストマイクロインスタンスから最小 2 vCPU〜(高め)
互換性PostgreSQL 100%PostgreSQL 100%(拡張機能)

6.3 Columnar Engine — HTAP の鍵

Columnar Engine は、Primary や Reader のメモリ内に列指向フォーマットの「シャドウデータ」を保持し、同じテーブルに対して行指向 OLTP と列指向 OLAP を同時にサポートします。設定は対象テーブル/列を指定するだけで、リアルタイムに同期されます。

💡 ベストプラクティス — AlloyDB AI AlloyDB AI は vector 拡張で埋め込みベクトル検索を、alloydb_scann で高速 ANN(近似最近傍)検索を提供します。「PostgreSQL の中で RAG(Retrieval-Augmented Generation)を完結したい」場合の第一候補。Vertex AI を google_ml_integration 経由で SQL から呼べます。

6.4 Cross-Region 災害復旧

Primary Cluster とは別リージョンに Secondary Cluster を作成し、非同期で継続的に複製します。災害時は Secondary を Promotion して新 Primary に切替。Cloud SQL の Cross-Region Read Replica と機能的には似ていますが、AlloyDB は「クラスタ全体」の単位で複製するため、複数 Read Pool も同時に DR されます。

6.5 試験での出題パターン(章6)

🎯 章 6 頻出問題
  • 「PostgreSQL で高負荷、Cloud SQL では性能不足」→ AlloyDB
  • 「同じテーブルに OLTP と分析クエリ」→ AlloyDB Columnar Engine
  • 「PostgreSQL でベクトル検索を実装」→ AlloyDB AI(pgvector + scann)
  • 「Read Replica が 10 個では足りない」→ AlloyDB Read Pool(最大 20)
  • 「99.99% SLA の PostgreSQL」→ AlloyDB(Cloud SQL は 99.95%)

6.6 AlloyDB 事故ケース集

🚨 事故ケース 1: Cloud SQL からの移行で接続文字列を変更し忘れ、旧 DB に書き続ける二重書き込み
状況Database Migration Service で AlloyDB 移行完了。アプリの一部マイクロサービスだけ接続文字列が古いまま、Cloud SQL 旧インスタンスに書き続けた。
原因① 接続文字列が複数サービスでハードコード。② 移行後の切替リハーサル不十分。
影響新旧 DB のデータ不整合、調整に 1 週間。
復旧旧 DB の差分を抽出し AlloyDB に手動同期。
再発防止接続文字列は Secret Manager に一元化、Cutover 直後に旧 DB を Read-only 化。DMS の Promote 直後にアプリ向け先変更を確認するスクリプト。
🚨 事故ケース 2: Read Pool 設定不足で本番ピーク時にレイテンシ急増
状況Primary 1 + Read Pool 1 ノードで起動。ピーク時に Read Pool が CPU 100% に張り付き、Primary に Read が流れて Write 遅延。
原因Read Pool の Auto-scaling 未設定、サイジング誤り。
影響UI レスポンス 10 秒超、SLO 違反。
復旧Read Pool ノード数を緊急増加(数分)。
再発防止Read Pool は 2 ノード以上の HA 構成。CPU/QPS をベースに 30〜50% バッファ。負荷テスト必須。
🚨 事故ケース 3: Columnar Engine 用メモリ不足で OLTP も遅延
状況Columnar Engine 有効化、対象テーブルを巨大にしすぎて Primary のメモリを圧迫、OLTP の Buffer Cache まで影響。
原因① 列指向用メモリ割当(columnar_engine.memory_size_in_mb)が大きすぎ。② テーブル選定が雑。
影響OLTP レイテンシ悪化、Columnar Engine 効果も中途半端。
復旧Columnar Engine の対象テーブル/列を絞り込み、メモリ割当を再調整。
再発防止Columnar Engine は「分析対象として明確なテーブル/列のみ」に限定。google_columnar_engine_recommend() 関数で推奨を確認。

6.7 AlloyDB 運用・保守ベストプラクティス

領域項目推奨
バックアップContinuous Backup + PITR14 日(最大 35 日)
DRSecondary Cluster(Cross-Region)RPO 数秒、RTO 数分
モニタリングCPU Utilization> 75% で警告
Replication Lag> 10 秒で警告
Connection Count上限 80%
Disk IOPSPerformance Recommender 確認
容量計画Read Pool スケールQPS / レイテンシ目標から逆算、最大 20 ノード

7Spanner 完全解剖

Spanner は Google が F1(広告)の運用基盤として開発し、「グローバル分散・外部強整合性・水平スケール・ACID トランザクション」を全て満たす唯一の DB です。試験では「グローバル」「99.999%」「TrueTime」「分散トランザクション」「Sharding」がキーワード。

「Spanner offers transactional consistency at global scale ... uses TrueTime for external consistency ... Multi-region 99.999% availability.」 — Spanner concepts

7.1 内部アーキテクチャの本質

TrueTime
Google データセンター内の 原子時計 + GPS 受信機 で実装された分散時刻 API。各ノードに「現在時刻の真の値」がある幅(uncertainty interval, ≈ 数ミリ秒)で返される。これにより外部強整合性が実現
外部強整合性
トランザクション T1 が T2 の前にコミットしたなら、T2 は必ず T1 の影響を観測できる。「線形化可能性」のグローバル版
Paxos + Synchronous Replication
各 Split は 3〜5 個のレプリカで Paxos 合意。書込はレプリカ多数派が ack するまで完了しない
Splits(旧 Shards)
テーブル/インデックスは行範囲で自動的に Split に分割。ホットスポット検出で自動再分割
Processing Units (PU)
コンピュート容量の最小単位。100 PU = 1/10 ノード相当。Editions 移行で精密なスケーリングが可能に

7.2 Instance Configuration(リージョナル vs マルチリージョン)

構成レプリカ配置SLA書込レイテンシ読込レイテンシ用途
Regional 3 つの read-write レプリカ(同一リージョンの 3 ゾーン) 99.99% 低(ゾーン間 1-3 ms) 低(同リージョン) 単一リージョンで完結する OLTP
Dual-region 2 リージョンの read-write レプリカ + Witness 99.99% 地理冗長と性能のバランス
Multi-region 2 つの read-write リージョン + 1 つの witness リージョン 99.999% やや高(リージョン間 RTT) 非常に低(最寄レプリカから読込) グローバル EC、グローバル金融、グローバル SaaS
99.99%
Regional SLA
99.999%
Multi-region SLA
3
Regional レプリカ数
100 PU
最小コンピュート

7.3 マルチリージョンの代表構成

Config IDRead-Write リージョンWitness用途
nam3us-east4, us-east1us-central1北米東部冗長
nam6us-central1, us-east1us-east4 等北米広域
nam-eur-asia1米国, 欧州, アジア真のグローバル(最高 5 nines)
eur5europe-west1, europe-west4europe-north1EU 内冗長
asia1asia-northeast1, asia-northeast2asia-northeast3日本+韓国

7.4 ホットスポット回避(主キー設計)

Spanner で最も犯しやすく、最も致命的なミスが 「単調増加プライマリキー」です。タイムスタンプや auto_increment 風の整数を先頭に置くと、すべての書込が 同一 Split(最も末尾のシャード)に集中し、水平スケールできません。

❌ アンチパターン

主キー(先頭列)に TIMESTAMPSERIAL、ユーザーが連番で増える user_id をそのまま使う。例:

CREATE TABLE events (
  created_at TIMESTAMP NOT NULL,
  event_id STRING(36) NOT NULL,
  ...
) PRIMARY KEY (created_at, event_id);
-- 最新行が全部同じ Split に集中

✅ ベストプラクティス

主キー先頭に UUIDv4 / Hash プレフィックス / シャード ID を入れ、ランダム分散させる:

CREATE TABLE events (
  shard_id INT64 NOT NULL,  -- FARM_FINGERPRINT(user_id) % 100
  user_id STRING(36) NOT NULL,
  created_at TIMESTAMP NOT NULL,
  ...
) PRIMARY KEY (shard_id, user_id, created_at);

または UUID を先頭に置く(読込パターンと相談)。

7.5 Interleaved Tables(親子テーブル局所性)

Spanner の特徴的な機能。「親テーブルの行と一緒に同じ Split に物理配置する子テーブル」を作れます。1:N 関係のクエリ(例: user とその orders)を 同一サーバの 1 リードで完結させ、JOIN 性能を最大化します。

📖 Interleaved Table の例
CREATE TABLE users (
  user_id STRING(36) NOT NULL,
  name STRING(MAX),
  ...
) PRIMARY KEY (user_id);

-- users の子テーブルとして配置
CREATE TABLE orders (
  user_id STRING(36) NOT NULL,
  order_id STRING(36) NOT NULL,
  amount NUMERIC,
  ...
) PRIMARY KEY (user_id, order_id),
  INTERLEAVE IN PARENT users ON DELETE CASCADE;

これで SELECT u.*, o.* FROM users u JOIN orders o USING (user_id) WHERE u.user_id = 'X'1 サーバの単一リードで完結します。

7.6 PostgreSQL 互換ダイアレクト

Spanner は GoogleSQL(ANSI 2011 + 拡張)PostgreSQL 互換ダイアレクトの 2 つを提供。既存 PG アプリの移行を容易化します。ただし PG ダイアレクトも完全互換ではなく、一部の PG 固有機能(pg_advisory_lock、CTAS など)は未サポート。

7.7 Spanner Editions(コンピュート割り当て)

Edition機能用途
StandardRegional, dual-region低価格、単一地域 OLTP
Enterprise+ Backup/Restore 強化、CMEK、データ Boost本番 OLTP
Enterprise Plus+ Multi-region 構成、Cross-Region 機能グローバル展開、99.999% SLA 要件

7.8 試験での出題パターン(章7)

🎯 章 7 頻出問題
  • 「グローバル ACID、99.999% SLA」→ Spanner Multi-region (Enterprise Plus)
  • 「ユーザーごとに行が増えていく、最新を頻繁にクエリ」→ 主キー先頭にハッシュプレフィックス
  • 「親子テーブルの JOIN 性能を最適化」→ Interleaved Table
  • 「PostgreSQL からの移行」→ Spanner PG ダイアレクト
  • 「水平スケールするがコストを精密に制御」→ Processing Unit(100 PU 単位)

7.9 Spanner 事故ケース集

🚨 事故ケース 1: 連番 ID 主キーで Hot Spot、ノード追加しても QPS 上がらない
状況注文テーブルの主キーに AUTO_INCREMENT 相当のシーケンス採番を採用。書込が全件最新 split に集中し、QPS が 3,000 で頭打ち。ノード数を 10 倍にしても改善せず。
原因① 主キー先頭が単調増加。② Spanner は連続した主キー範囲を 1 つの split に配置し、その split を 1 ノードが担当するため。
影響スケーリングが効かず、コスト増加だけ。
復旧テーブル再設計:主キー先頭にハッシュ(SHA256(user_id) MOD 1024)or UUID v4 を配置。データ移行。
再発防止設計レビューで主キーに「単調増加」「タイムスタンプ先頭」をブロックするチェック項目。Key Visualizer で hot split を可視化、Cloud Monitoring でアラート。
🚨 事故ケース 2: Interleaved Table の階層が深すぎてクエリ遅延
状況パフォーマンス目的で Customer → Order → OrderItem → ItemDetail と 4 階層 Interleave。実際のクエリで Customer のみ取得する場合も子テーブル全体がスキャン対象に。
原因① Interleaved Table の階層を 7 まで作成(推奨は 2-3)。② アクセスパターンと不一致。
影響クエリレイテンシ悪化、Storage 効率も悪化。
復旧子テーブルを独立化、Foreign Key で関係を保つ設計に再構築。
再発防止Interleave は 常に親と JOIN する子テーブルに限定。深さは 2-3 まで。
🚨 事故ケース 3: Read-Write Transaction 内で大量 Read してロック競合
状況「在庫数取得 → 計算 → 更新」を 1 つの Read-Write Transaction にまとめ、商品全体(10 万行)を読む実装。同時アクセスでロック競合多発、Abort → Retry の嵐。
原因① Read-only でよい部分まで Read-Write 内に。② 不要な広範囲ロック。
影響QPS 急減、Tail latency 増大。
復旧事前 Read を Read-only Transaction に分離。更新対象のみ Read-Write Transaction で。
再発防止「Read-only は SingleUse or ReadOnly で実行」をコーディング規約。lock_wait_time メトリクスを監視。
🚨 事故ケース 4: Multi-region 構成で開始したが、Regional に戻せないことが判明
状況当初 Multi-region nam-eur-asia1 で開始。ユーザー基盤が日本中心と判明し、コスト最適化のため Regional asia-northeast1 へ移行希望。
原因Spanner の Instance Configuration は 作成後に変更不可
影響新インスタンス作成 + データコピー + ダウンタイム調整が必要。
復旧Dataflow(Spanner export → import)で移行、Cutover で短時間ダウン。
再発防止初期設計時にユーザー分布を精査し、明確に Multi-region が必要な場合のみ採用。Multi-region は SLA 99.999% で月コスト 5〜10 倍

7.10 Spanner 運用・保守ベストプラクティス

領域項目推奨
バックアップBackup(インスタンス内)日次、保持 最大 1 年
Export to GCSDataflow テンプレートで月次、長期保管用
モニタリングCPU Utilization> 65% で警告(自動スケール推奨)
Lock Wait Time> 100 ms で警告
Read/Write Latencyp99 を SLO で監視
Storage Utilizationノード当り 4 TB 上限
Key Visualizer週次でホットスポット確認
容量計画PU / ノード追加CPU 65% で自動スケール、最小 100 PU

8BigQuery 完全解剖

BigQuery は 「Storage と Compute が完全に分離されたサーバーレス DWH」です。内部では Capacitor(列指向ストレージ)、Dremel(分散クエリエンジン)、Colossus(Google ファイルシステム)、Jupiter(Petabit ネットワーク)が連動します。試験では「On-demand vs Editions」「Partitioning + Clustering」「フェデレーテッドクエリ」「BigQuery ML」「Omni」が頻出。

「BigQuery separates compute and storage layers connected via Google's petabit-scale network ... storage layer uses columnar format optimized for analytics.」 — BigQuery overview

8.1 BigQuery アーキテクチャ(SVG 図解)

Compute Layer — Dremel Engine クエリを Tree of Nodes に分解 → 並列実行 Root Node クエリ受付 結果集約 Mixer Nodes 中間集約 Shuffle Leaf Nodes (Slots) Capacitor からデータを読み込み、フィルタ + 列射影 スロット = 仮想 CPU + RAM(1 スロット ≈ 1/200 ノード相当) Jupiter Network — Petabit/秒のバンド幅で Compute ↔ Storage 接続 Storage Layer — Capacitor (列指向) on Colossus 列ごとに圧縮、自動 sharding、自動 replication Active Storage 過去 90 日間更新あり $0.02/GB/月 読込課金あり Long-term Storage 90 日変更なし $0.01/GB/月(自動 50% OFF) 機能はそのまま External Tables GCS / Bigtable / Drive S3 / Azure Blob (Omni) フェデレーテッドクエリ Federated Sources Cloud SQL / Spanner AlloyDB 外部 OLTP の直接クエリ
図 8-1:BigQuery は Compute(Dremel)Storage(Capacitor on Colossus) を分離し、Jupiter ネットワークで結合。各層が独立して伸縮することで PB クラスの分析を実現します。

8.2 ストレージの 3 階層

階層条件料金(参考)機能制限
Active Storage過去 90 日に変更あり$0.02/GB/月制限なし
Long-term Storage90 日連続で変更なし$0.01/GB/月(50% OFF 自動)機能は同じ(読込・更新・コピー OK)
Physical Storage Billing圧縮後サイズで課金圧縮率次第で更に削減論理サイズ課金との切替式
💡 ベストプラクティス — Physical Storage Billing 圧縮率が良いデータ(時系列、ログ、ID 列が多いテーブル等)は Physical Storage Billing に切り替えると更に大幅に安くなります。ただし圧縮率が悪い(ランダム文字列のみ等)テーブルは逆に高くなる場合があるので、データセット単位で実測してから判断。

8.3 課金モデル — On-demand vs Editions

「BigQuery offers dual pricing: on-demand per-query charges or capacity-based reservations.」 — BigQuery Reservations
On-demand

クエリスキャン量で課金

$6.25 / TB スキャン(既定料金)。初期費用なし、即時起動。月 1 TiB の無料枠あり。

適合: 開発、PoC、月間スキャン量が予測しづらい中小規模

リスク: SELECT * 一発で巨額請求

Editions (Capacity-based)

スロット予約で固定料金

Standard / Enterprise / Enterprise Plus の 3 段階。スロット数を予約(baseline + autoscale max)し、時間課金。1 年/3 年コミットで割引。

適合: 月間スキャンが安定して大量、本番ワークロード

メリット: 予算固定、スロット使い切り効率化

8.3.1 Editions の機能差分

機能StandardEnterpriseEnterprise Plus
SQL クエリ
Streaming Inserts
Materialized View
BI Engine
BigQuery ML
Multi-region データセット
CMEK
VPC Service Controls
Cross-Region 災害復旧

8.3.2 Reservation の構造

8.4 Partitioning + Clustering(コスト削減の双璧)

8.4.1 Partitioning の 3 方式

方式パーティションキー用途
Time-unit ColumnDATE / TIMESTAMP / DATETIME 列イベント発生日でクエリする場合(最も一般的)
Integer RangeINT64 列の範囲customer_id 等の数値範囲で絞り込みたい場合
Ingestion Time_PARTITIONTIME 疑似列ロードした時刻で自動分割(既定)
「Maximum 4,000 partitions per table. Limited to 10,000 partition modifications daily.」 — Partitioned tables

8.4.2 Clustering との組合せ

Partitioning が「パーティション単位の物理分割」を提供するのに対し、Clustering は「列の並べ替えによるブロック内ソート」を提供します。両者を組み合わせると以下の効果:

❌ アンチパターン

SELECT * FROM logs WHERE event_date = '2026-05-28' を Partition 無しで実行 → テーブル全体(数 TB)をスキャン

SELECT * FROM users を 5 TB テーブルで実行 → 毎回 $31 課金。月数千ドルの請求事故。

✅ ベストプラクティス

テーブル作成時に:

CREATE TABLE logs
PARTITION BY DATE(event_timestamp)
CLUSTER BY user_id, event_type
AS SELECT * FROM source;

クエリ:WHERE DATE(event_timestamp) = '2026-05-28' AND user_id = 'X'1 パーティション + Cluster Pruning で 0.001% のみスキャン

8.5 Materialized View と BI Engine

Materialized View
事前集計を保存した「マテリアライズ済みクエリ」。ベーステーブルの更新を自動追従。AGG クエリの劇的高速化
BI Engine
BigQuery のメモリ内インメモリ列指向キャッシュ。Looker / Looker Studio などの BI ツールから サブ秒応答を実現
Authorized Views
権限制御のないテーブルを、権限制限されたユーザーに「ビュー経由でのみ」見せる仕組み
Search Index
文字列の部分一致検索を高速化。全テーブルスキャンを回避

8.6 BigQuery Omni(マルチクラウドクエリ)

BigQuery Omni は、Amazon S3 / Azure Blob 上のデータを「データを GCP に動かさずに」BigQuery 構文でクエリできる機能です。AWS リージョン内に Anthos クラスタを Google が管理して BigQuery エンジンを動かす方式。

8.7 BigQuery ML(SQL で機械学習)

BigQuery ML は SQL だけで ML モデルを学習・推論できる機能。データを動かさずモデル化、Vertex AI との連携、生成 AI(Gemini)の呼出までサポート。

カテゴリモデル
教師あり学習線形回帰、ロジスティック回帰、Boosted Tree、Random Forest、DNN、AutoML
教師なし学習K-means、Matrix Factorization、PCA
時系列ARIMA Plus(季節性自動検出)
異常検知Isolation Forest、Autoencoder
生成 AIML.GENERATE_TEXT、ML.GENERATE_EMBEDDING、ML.UNDERSTAND_TEXT(Gemini 連携)

8.8 フェデレーテッドクエリ(外部 OLTP の直接 SQL)

BigQuery から Cloud SQL / Spanner / AlloyDB に直接クエリを発行できる機能。データを BigQuery にロードせず、リアルタイムの OLTP 値を分析に組み込めます。

-- Cloud SQL を BigQuery から直接クエリ
SELECT * FROM EXTERNAL_QUERY(
  "my-project.us.my-cloudsql-connection",
  "SELECT customer_id, total_amount FROM orders WHERE status = 'pending'"
);
⚠️ フェデレーテッドクエリの注意 外部 OLTP に直接 SQL を投げるため、OLTP の負荷増・接続枯渇のリスクがあります。Read Replica に接続する、または Datastream で BigQuery にリアルタイム複製する方が安全な場合が多い。

8.9 試験での出題パターン(章8)

🎯 章 8 頻出問題
  • 「PB クラスの分析、サーバ管理したくない」→ BigQuery
  • 「クエリ料金が予測できないので固定したい」→ Editions(Reservation)
  • 「OLTP のリアルタイムデータを分析」→ フェデレーテッドクエリ or Datastream
  • 「S3 のデータを GCP に動かさず分析」→ BigQuery Omni
  • 「BI ツールから 1 秒以下で応答」→ BI Engine
  • 「SQL で機械学習モデル」→ BigQuery ML
  • 「Cloud SQL を BigQuery で直接クエリ」→ EXTERNAL_QUERY 関数

9BigQuery コスト最適化

BigQuery は安く使えば極めて安い一方、SELECT * の事故」「予期しない再計算」「On-demand での暴走」で月数千ドル〜数万ドルの請求事故を生みます。本章ではコスト削減のテクニックを体系化します。

9.1 4 大ルール(暗記必須)

  1. SELECT * は絶対禁止:必要な列だけを明示。BigQuery は列指向なので、列を絞れば線形にコスト削減。
  2. 必ず Partition を切り、クエリで WHERE 句にパーティション列を含める:パーティションプルーニングで読込量を 1/100〜1/1000 に削減。
  3. Cluster で高カーディナリティ列(user_id 等)を並べ替え:パーティション内ブロックも skip 可能に。
  4. Dry Run で予測 → 月予算アラート設定--dry_run で「このクエリは何 TB スキャンするか」を実行前に確認。

9.2 コストガード設定

機能設定効果
Maximum Bytes Billedクエリ単位の上限(バイト)1 クエリ暴走を防止
Custom Quotaプロジェクト/ユーザー単位の日次/月次クォータ個人や暴走バッチの上限化
Budget Alerts月予算閾値(50%/90%/100%)でアラート月予算超過を早期検知
Reservations への移行固定スロット数で予算固定絶対的なコスト上限化
Cached Results同じクエリ結果を 24 時間自動キャッシュ重複クエリは無料
📖 Dry Run で予測コストを確認するコマンド
# Dry Run でスキャン量を予測
bq query --use_legacy_sql=false --dry_run \
  'SELECT user_id, event_type FROM `myproject.logs.events`
   WHERE DATE(event_timestamp) = "2026-05-28"'

# 出力: This query will process 12.4 GB when run.

# 1 クエリの最大課金バイト数を制限
bq query --use_legacy_sql=false --maximum_bytes_billed=10000000000 \
  'SELECT ...'  # 10 GB を超えるクエリは実行前にエラー

CI/CD で SQL を自動 Dry Run チェックする運用がコスト事故ゼロへの近道。

9.3 Storage コスト削減

9.4 試験での出題パターン(章9)

🎯 章 9 頻出問題
  • 「BigQuery で月数千ドルの請求事故」→ SELECT * 廃止 + Partition + Cluster + Dry Run
  • 「個人開発者が誤って暴走クエリ」→ Custom Quota(ユーザー単位)
  • 「予算を絶対超えたくない」→ Editions(Reservation)で固定化
  • 「過去 30 日のみ分析、それ以前は削除」→ partition_expiration_days = 30
  • 「圧縮率が高いテーブル」→ Physical Storage Billing

9.X BigQuery 事故ケース集

🚨 事故ケース 1: SELECT * で 800 TB スキャン、単発で数万ドル請求
状況BI ツールから新人が SELECT * FROM events を WHERE 句なしで実行。events は 800 TB の Partition なしテーブル。On-demand 料金で約 $5,000 の単発請求
原因① Partition なし。② SELECT *。③ Custom Quota / Maximum Bytes Billed 未設定。
影響月予算を 1 クエリで超過。
復旧—(既に課金)。Google サポート交渉も基本不可。
再発防止① テーブル単位で --maximum_bytes_billed を強制(クエリ設定)。② プロジェクト単位の Custom Quota(QueryUsagePerDay)。③ require_partition_filter=true を Partition テーブルで設定。④ BI ツールは Reservation 経由に切替。
🚨 事故ケース 2: Streaming Insert 重複でデータ品質劣化
状況insertId 未指定で tabledata.insertAll を使用。クライアント側リトライで同一行が複数回挿入され、レポート集計が二重カウント。
原因insertId による de-duplication 未使用。
影響分析データの信頼性喪失。
復旧重複検出 SQL(ROW_NUMBER())で除去、補正テーブル作成。
再発防止insertId を必ず指定(exactly-once)。新規開発は Storage Write API(exactly-once 標準)を使う。
🚨 事故ケース 3: Dataset の Cross-region コピーで巨額 Egress 課金
状況US Dataset を Tokyo に毎日同期。1 回 5 TB の Egress で月数十万円。
原因① 同期頻度の見直し不足。② Authorized View や Cross-region Replica の代替案未検討。
影響転送料金が想定外に膨張。
復旧同期頻度を週次に削減 + 差分のみ転送(パーティション単位)。
再発防止BigQuery Cross-region Dataset Replica(マネージド、効率的)を使用。もしくは Dataset を 1 リージョンに統一。
🚨 事故ケース 4: Reservation の Idle Slots 設定漏れで余剰コスト
状況Editions Enterprise で 1000 slots Reservation を購入。実利用は 300 slots、残り 700 がアイドル。Idle Slots Sharing オフのため他 Reservation でも使えず、丸ごと無駄。
原因① 過剰サイジング。② Idle slot sharing 設定漏れ。
影響月数百万円の固定費が余剰。
復旧Reservation サイズダウン、Autoscaler 有効化。
再発防止Autoscaler(Baseline + Max)を活用。Idle Slot Sharing を有効化。Reservation はCommitment(1y/3y)を最小限に、残りは Autoscale で柔軟に。

9.Y BigQuery 運用・保守ベストプラクティス

領域項目推奨
バックアップTime Travel2〜7 日(変更不可)
Table Snapshot長期保管、低コスト(差分のみ課金)
Export to GCS月次フル Export、Archive クラス
DRCross-region Dataset Replicaマネージド非同期レプリカ
モニタリングSlot UtilizationReservation 別に監視
Bytes Processedクエリ別、ユーザー別を INFORMATION_SCHEMA で集計
Job Concurrency並列ジョブ数の上限監視
Failed Jobs Rate5% 超でアラート
コスト監視Custom Quotaユーザー / プロジェクト単位の日次上限
Maximum Bytes Billedクエリ単位の上限(デフォルト or 設定)
Budget AlertBigQuery 専用ラベルで個別予算
📋 BigQuery 運用 bq / SQL コマンド
# Maximum bytes billed をクエリ設定で強制
bq query --maximum_bytes_billed=1000000000 'SELECT ...'

# Custom Quota 例(コンソール/API): QueryUsagePerDay = 10 TB

# Time Travel で 1 時間前の状態を参照
SELECT * FROM `project.dataset.table`
  FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR);

# Table Snapshot 作成
CREATE SNAPSHOT TABLE `project.dataset.events_snap_20260528`
  CLONE `project.dataset.events`
  OPTIONS(expiration_timestamp = TIMESTAMP '2026-12-31 00:00:00');

# 月別クエリコスト集計
SELECT user_email, SUM(total_bytes_billed)/POW(1024,4) AS tb_billed
FROM `region-asia-northeast1`.INFORMATION_SCHEMA.JOBS
WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY user_email ORDER BY tb_billed DESC;

10Bigtable 詳細 — 大規模ワイドカラム KV

Bigtable は Google の Search、Gmail、Maps、AdSense を支えてきた 「ペタバイトクラスの低レイテンシ KV ストア」です。HBase API 互換、行キー設計が性能の 9 割を決めます。試験では「行キー設計」「時系列の hot tablet」「Multi-cluster Routing」「SSD vs HDD」が頻出。

「Bigtable tables are sharded into blocks of contiguous rows, called tablets ... data is never stored in Bigtable nodes themselves; each node has pointers to a set of tablets.」 — Bigtable overview

10.1 アーキテクチャ(SVG 図解)

Bigtable Cluster (Zone) Compute Layer — Nodes(容量に応じて 1〜数百) Node 1 → tablet ptr Node 2 → tablet ptr Node 3 → tablet ptr Node N(Autoscale 可) CPU 監視で自動 + / - Storage Layer — Colossus(Google ファイルシステム) データはノードに保存されず、Colossus 上の SSTable ファイルで管理 Tablet 1 key range a → c Tablet 2 key range c → f Tablet 3 key range f → m Tablet N(自動分割) hot tablet 検出時に sub-split • 各 Tablet は連続した行キー範囲を保持 • 負荷に応じて自動分割・ノード間で移動 • データはノード障害で失われない(Colossus に保管)
図 10-1:Bigtable は 「データはノードに無い、すべて Colossus 上の Tablet」というアーキテクチャ。ノードはタブレットへのポインタを持つだけなので、ノード追加・障害復旧が高速。

10.2 Row Key 設計 — 性能を 100 倍変える

「Design your row key based on the queries you will use ... Place high-cardinality values at the beginning to distribute data evenly.」 — Bigtable schema design

10.2.1 致命的なアンチパターン

❌ 時系列ホットタブレット

Row Key 先頭にタイムスタンプを置く:

2026-05-28-12-34-56-event001
2026-05-28-12-34-57-event002
2026-05-28-12-34-58-event003

すべての最新書込が同じ tablet に集中し、その tablet を担当する 1 ノードが過負荷。秒間 100 QPS で頭打ち。

✅ ハッシュプレフィックス + Reverse Timestamp

device_id をハッシュして先頭に、タイムスタンプを反転(新しい順):

3f2a#device-001#9999999999-event001
7b1c#device-002#9999999999-event002
a4d8#device-001#9999999998-event003

書込がランダム分散同一 device の最新行は同じ tablet で連続。秒間百万 QPS まで線形スケール。

10.2.2 設計原則のまとめ

10.3 Multi-cluster Routing と Replication

Bigtable のインスタンスは 1 つのインスタンスに最大 8 個のクラスタ(リージョン横断含む)を持てます。「Multi-cluster Routing」を有効にすると、クライアントは最も近い健全なクラスタに自動接続し、フェイルオーバーが透過的に行われます。

Single-cluster Routing
1 クラスタのみに常にルート。整合性が予測可能だが、障害時はアプリ側で対処
Multi-cluster Routing
最寄り健全クラスタに自動ルート。アプリは何もしなくても HA
App Profile
ルーティング戦略を定義するプロファイル(クラスタごとに分けられる)
整合性
Multi-cluster は 結果整合性(書込の他クラスタへの伝播はミリ秒〜秒)

10.4 SSD vs HDD ノード

項目SSDHDD
料金(ノード単価)標準約 1/5
レイテンシ数 ms数十〜数百 ms
用途本番 OLTP / リアルタイムアーカイブ、低頻度バッチ
QPS 上限
変換後から変換不可(新インスタンス + データコピー)
⚠️ SSD/HDD は作成後に変更不可 Bigtable インスタンスの SSD/HDD は 作成時にしか選べず、後から変更できません。間違って HDD を本番に作ってしまった場合は、新インスタンス(SSD)を作ってデータコピー → アプリ向け先変更が必要です。

10.5 Autoscaling

Bigtable は CPU 使用率と Storage 使用率を監視し、ノード数を自動 +/- する Autoscaling をサポート。最小・最大ノード数と「CPU 目標 %」を指定するだけ。

10.6 試験での出題パターン(章10)

🎯 章 10 頻出問題
  • 「時系列で書込 QPS が伸びない」→ Row Key の先頭をハッシュプレフィックス化
  • 「IoT 100 万デバイス、秒 100 万書込、低レイテンシ」→ Bigtable + Autoscaling
  • 「HBase からの移行」→ Bigtable(HBase API 互換)
  • 「リージョン障害時も自動切替」→ Multi-cluster Routing(Multi-region 構成)
  • 「コスト最優先、レイテンシ緩い」→ HDD ノード(変更不可なので慎重に)

10.7 Bigtable 事故ケース集

🚨 事故ケース 1: 時系列 Row Key で Hot Tablet、全 QPS が単一ノードに集中
状況IoT 100 万デバイスからのテレメトリを YYYYMMDDHHMMSS-deviceId 形式の Row Key で書き込み。書込 QPS が 5 万を超えたあたりで latency 急増、ノード 30 台に増やしても改善せず。
原因① Row Key 先頭が単調増加タイムスタンプ。② 全書込が「最新の tablet」 = 1 ノードに集中。
影響書込スループット頭打ち、リアルタイム分析失敗。
復旧Row Key 再設計:{hash(deviceId)}#{deviceId}#{reverseTimestamp} に変更。Dataflow で既存データ再キー化。
再発防止設計レビューで「タイムスタンプ単独先頭の Row Key 禁止」をルール化。Key Visualizer で hot tablet を可視化、CPU の偏り(hottest node CPU)を監視。
🚨 事故ケース 2: 単一クラスタで本番運用、ノード障害で 30 分ダウン
状況Production の Bigtable Instance を Single-cluster で構成。クラスタが収容されたゾーン障害発生、データはあるが書込不可状態が 30 分継続。
原因① Single-cluster Routing。② Replication 未構成。
影響本番障害、Pub/Sub バックプレッシャ、上流パイプライン全停止。
復旧Google による自動復旧待ち。
再発防止Production は Multi-cluster Routing(2-3 クラスタ)必須。App Profile で routing policy を明示。Replication Lag を監視。
🚨 事故ケース 3: バックアップ未設定で誤 DROP、復旧不能
状況運用スクリプトのバグで本番テーブルを cbt deletetable。Bigtable Backup を一度も取っていなかったため復旧不能。
原因① Backup 未設定。② IAM で bigtable.tables.delete 権限が広く付与されていた。
影響1 年分の時系列データ消失。
復旧GCS にアーカイブされた一部 raw データから再インポート、欠損あり。
再発防止定期 Backup(最大 30 日保持)+ 別バケットへの Export。IAM 最小権限、削除権限は専用ロールのみ。

10.8 Bigtable 運用・保守ベストプラクティス

領域項目推奨
バックアップBackup(テーブル単位)日次、保持 最大 30 日
Export to GCS(Dataflow)月次、長期保管用 Archive クラス
HA / DRMulti-cluster Replication2-3 クラスタ、Multi-cluster Routing
モニタリングCPU per node> 70% で警告(自動スケール推奨)
Hottest Node CPUクラスタ平均との乖離で hot spot 検出
Read/Write Latency p99SLO ベースで監視
Storage UtilizationSSD: 2.5 TB/node, HDD: 8 TB/node
容量計画AutoscalingCPU 70% 目標、最小・最大ノード設定

11Firestore — モバイル/Web リアルタイム DB

Firestore は 「ドキュメント指向 NoSQL + モバイル SDK によるリアルタイム同期」を一体で提供する DB です。試験では「Native vs Datastore mode」「Composite Index」「整合性モデル」「Security Rules」「Multi-Database」が頻出。

11.1 Native mode vs Datastore mode

項目Native modeDatastore mode
用途新規開発、モバイル/WebDatastore からの後方互換
リアルタイムリスナー×
クライアント SDKiOS/Android/Web 直結サーバー経由のみ
強整合性単一ドキュメント + クエリEntity Group 内のみ
スループット水平スケール(自動)水平スケール(自動)

11.2 データモデル — Collection / Document / Subcollection

11.3 Index — Single Field と Composite

Firestore はデフォルトで全フィールドに Single Field Indexを自動生成します。複数フィールドの組合せ(例: WHERE city = 'Tokyo' AND age >= 20 ORDER BY name)は Composite Index を明示的に作成する必要があります。Composite Index がない場合、Firestore コンソールにエラー + 作成リンクが表示されます。

11.4 制限(重要)

項目制限
1 ドキュメントの最大サイズ1 MiB
1 ドキュメントへの書込上限1 回 / 秒(持続的に)
1 Composite Index あたりの書込500 / 秒(推奨)
1 Collection の最大 Index 数200
Transaction 内の最大書込数500 ドキュメント
Listen / Realtime 接続数同時 100 万

11.5 Multi-Database

2023 以降、同一プロジェクトに複数の Firestore Databaseを作成可能(最大 100)。本番 / ステージング / リージョン別を 1 プロジェクトに同居でき、IAM で個別制御可能。

11.6 Security Rules

Firestore はクライアント SDK から直接アクセスされるため、Security Rules でアクセス制御が必須。デフォルトでは allow read, write: if false;(全拒否)。本番に向けて Auth UID ベースのルールを徹底します。

📋 Security Rules サンプル
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // ユーザー自身のドキュメントのみ書込可
    match /users/{userId} {
      allow read: if request.auth != null;
      allow write: if request.auth.uid == userId;
    }
    // 公開投稿は誰でも読める
    match /posts/{postId} {
      allow read: if true;
      allow create: if request.auth != null
        && request.resource.data.authorId == request.auth.uid;
      allow update, delete: if request.auth.uid == resource.data.authorId;
    }
  }
}

11.7 Firestore 事故ケース集

🚨 事故ケース 1: Security Rules 未設定で全データ漏洩
状況「テスト用」として allow read, write: if true; でリリース。モバイルアプリ越しに第三者が全 Collection をダンプ。
原因Security Rules 未設定。Firebase はデフォルトでクライアント直結なので、ルールがアクセス制御の全て。
影響個人情報 100 万件流出。
復旧Security Rules 緊急修正、影響ユーザーへの通知。
再発防止Firebase Emulator で Rules テスト自動化(CI に組込)。「本番デプロイ前に Rules テスト」をリリースゲートに。
🚨 事故ケース 2: 1 ドキュメント 1 MB 上限超過でアプリエラー
状況チャット履歴を 1 ドキュメントに配列で全件保存。会話が長期化し 1 MB 超え、書込全失敗。
原因① ドキュメント設計のアンチパターン(成長する配列)。② 1 MB 上限を考慮しない設計。
影響該当ユーザーのチャット書込不可。
復旧Subcollection 構造に再設計、Dataflow で移行。
再発防止「成長する配列はドキュメントに持たない」原則。メッセージは Subcollection 化。ドキュメントサイズを Cloud Monitoring で監視。
🚨 事故ケース 3: Hot Document(1 ドキュメント / 1 書込/秒)で書込失敗多発
状況「全体のいいね数カウンター」を 1 ドキュメントで保持。秒 1000 リクエストで RESOURCE_EXHAUSTED エラー。
原因Firestore の 1 ドキュメントへの持続的書込は 1 回 / 秒制限。
影響カウンター更新失敗、UX 劣化。
復旧Distributed Counter パターン(カウンタを N シャードに分散、読み取り時に合計)に再設計。
再発防止1 ドキュメントに集中する書込パターンは Distributed Counter で水平分散。Bigtable 検討も。
🚨 事故ケース 4: Composite Index 不足でリリース後にクエリ全失敗
状況本番リリース直後、特定画面で 500 エラー連発。原因はクエリに必要な Composite Index が未デプロイ。
原因① Index 定義(firestore.indexes.json)をリポジトリ管理せず、Dev 環境で手動作成のみ。② CI でデプロイされず。
影響本番障害、ロールバック。
復旧Firestore コンソールに表示されるリンクから Index 作成(数分〜数十分かかる)。
再発防止firebase deploy --only firestore:indexes を CI/CD に組込。Index は IaC 管理。

11.8 Firestore 運用・保守ベストプラクティス

領域項目推奨
バックアップScheduled Export to GCS日次、Archive クラス長期保管
DRPITR(Point-in-Time Recovery)過去 7 日まで秒単位で復元(Native mode)
モニタリングRead/Write OpsCustom Quota で異常検知
Storage Size1 ドキュメントサイズの分布監視
Rule EvaluationsSecurity Rules のミスマッチ数
セキュリティSecurity RulesEmulator + CI で自動テスト

11.9 試験での出題パターン(章11)

🎯 章 11 頻出問題
  • 「モバイルアプリ、オフライン同期、リアルタイム」→ Firestore Native
  • 「クライアントから直接アクセス、認可」→ Security Rules
  • 「いいね数カウンター」→ Distributed Counter パターン
  • 「過去 7 日の特定時刻に戻したい」→ PITR
  • 「Datastore からの移行」→ Datastore mode 維持 or Native mode に移行

12Memorystore — Redis / Valkey / Memcached

Memorystore は 「Google マネージドのインメモリ KV」です。3 つのエンジン(RedisValkey(Redis OSS のフォーク)、Memcached)から選び、Standard / Cluster / Cluster Enterprise の 3 ティアでスケール特性が変わります。試験では「Standard vs Cluster」「Persistence (AOF/RDB)」「Failover」が頻出。

12.1 エンジン選定

エンジン用途特徴
Memorystore for Redisセッション、キャッシュ、Pub/Sub、リーダーボードOSS Redis 6.x / 7.x 互換、AOF Persistence
Memorystore for ValkeyRedis 互換、ライセンス非依存Linux Foundation の Redis フォーク、OSS
Memorystore for MemcachedシンプルキャッシュPersistence なし、純粋なキャッシュ

12.2 Tier 比較 — Standard vs Cluster

項目Standard (Basic/HA)Cluster
シャーディング×(単一ノード)○(最大 250 シャード)
HA / Read ReplicaHA tier で 1 standby各シャードに 0-5 replica
最大メモリ300 GB数 TB(シャード × サイズ)
PersistenceAOF / RDB(任意)RDB スナップショット
用途中小規模キャッシュ、セッション大規模、スケールアウト必要

12.3 Persistence — AOF vs RDB

12.4 Memorystore 事故ケース集

🚨 事故ケース 1: Persistence 無効で再起動時に全消滅 → DB に殺到して連鎖障害
状況セッション情報を全て Memorystore(Persistence 無効)に保存。Google のメンテナンスで再起動、キャッシュ全消滅。アプリは Cloud SQL にフォールバックし、SQL が捌けず DB ダウン。
原因① Persistence 無効。② Cache Stampede 対策なし。
影響サービス全停止 2 時間。
復旧Cloud SQL のスケールアップ + キャッシュ温め直し。
再発防止セッションは Persistence 有効化(AOF everysec)or Firestore に移行。Cache 復帰時は jitter + 段階的に warm-up。Circuit Breaker を Cloud SQL 前に配置。
🚨 事故ケース 2: Standard tier で Read Replica なし、読込集中でレイテンシ悪化
状況1 ノード Standard で運用。アクセス急増で CPU 100%、応答 100 ms 超。
原因① Standard tier の制約(Read Replica なし or 1 個まで)。② Cluster tier 未検討。
影響UI レスポンス悪化、CDN ヒット率も低下。
復旧Cluster tier へ移行(マイグレーション必要)。
再発防止QPS > 50,000 が見込まれる場合は最初から Cluster tier。Read Replica で読込分散。
🚨 事故ケース 3: AOF rewrite 中のメモリ消費増でインスタンス停止
状況メモリ 4 GB のうち 3.5 GB 使用、AOF rewrite が走った瞬間にメモリ枯渇 → OOM killer 発動 → インスタンス停止。
原因AOF rewrite は fork で一時的に親プロセス分のメモリを使う。空きメモリ不足。
影響キャッシュ全消滅。
復旧インスタンスサイズアップ。
再発防止メモリの 50% は空けておく(AOF rewrite buffer 用)。maxmemory-policy = allkeys-lru 等で上限制御。Memory Utilization を Cloud Monitoring で監視(80% で警告)。

12.5 Memorystore 運用・保守ベストプラクティス

領域項目推奨
バックアップRDB Snapshot日次、GCS にエクスポート
AOFRPO 重視(< 1 秒)の場合 everysec
HAStandard HA / Cluster本番は最低 HA Standard、大規模は Cluster + Replica
モニタリングMemory Utilization> 80% で警告(OOM 回避)
CPU Utilization> 70% で警告
Cache Hit Ratio< 80% でチューニング検討
Evicted Keys増加傾向ならメモリ拡張

12.6 試験での出題パターン(章12)

🎯 章 12 頻出問題
  • 「セッション保管、再起動で消えてもよい」→ Memorystore Memcached or Redis(Persistence なし)
  • 「セッション、絶対消えてはいけない」→ Firestore or Redis AOF + HA
  • 「Redis、スケールアウト必要」→ Memorystore Cluster
  • 「OSS ライセンス回避」→ Memorystore for Valkey
  • 「リーダーボード、Pub/Sub」→ Memorystore for Redis

13Persistent Disk vs Hyperdisk

VM にアタッチするブロックストレージは、従来の Persistent Disk(PD) と新世代 Hyperdisk の 2 系統があります。Hyperdisk は「容量と IOPS と Throughput を独立してプロビジョン」できる点が革新的で、新規構築では Hyperdisk が第一候補です。試験では「タイプ選定」「Snapshot vs Image」「Regional PD」「Local SSD の揮発性」が頻出。

13.1 タイプ全体マップ

タイプ世代用途耐久性
pd-standard (HDD)Cold データ、低 IOPSレプリカ済
pd-balanced汎用、コスト効率レプリカ済
pd-ssd高 IOPS、DBレプリカ済
pd-extreme最高 IOPS、IOPS をプロビジョンレプリカ済
Hyperdisk Balanced汎用、IOPS+Throughput をプロビジョンレプリカ済
Hyperdisk Throughputスループット重視(HDFS, Kafka)レプリカ済
Hyperdisk Extreme最高 IOPS(350K+)、SAP HANAレプリカ済
Hyperdisk ML大規模 ML 読込、多 VM 同時アタッチ可レプリカ済
Local SSDキャッシュ、スクラッチ揮発性

13.2 Hyperdisk のキー特徴

13.3 Regional PD と Async Replication

Regional PD は 2 ゾーン間で同期レプリケーションされる PD。ゾーン障害時のフェイルオーバーが容易ですが、レイテンシ・コスト面で Zonal PD の約 2 倍。Hyperdisk はAsync Replication(非同期、別リージョンへ)を別途サポートします(DR 用)。

13.4 Snapshot のベストプラクティス

13.5 PD/Hyperdisk 事故ケース集

🚨 事故ケース 1: VM 削除時に PD も削除(auto-delete=true)、Snapshot もなしでデータ消失
状況本番 DB の VM をスケールアップ目的で削除・再作成しようとしたが、起動ディスクの auto-delete=true 設定でデータディスクごと削除。
原因--no-boot-disk-auto-delete 未指定。② Snapshot Schedule なし。
影響本番 DB 全消失。
復旧—(不可能)。GCS の論理バックアップから部分復元。
再発防止本番 PD は auto-delete=false + Snapshot Schedule(日次)+ Resource Manager の Lien で削除禁止。Terraform で prevent_destroy = true
🚨 事故ケース 2: pd-standard で本番 DB を運用、IOPS 不足で常時遅延
状況コスト削減のため pd-standard(HDD)で MySQL 本番。IOPS 上限 3,000 でクエリレイテンシ悪化、サービス UX 劣化。
原因① タイプ選定ミス。② IOPS / Throughput のサイジング不足。
影響常時遅い、検索 UX 悪化。
復旧pd-ssd or Hyperdisk Balanced へオンライン移行(タイプ変更可)。
再発防止本番 DB は Hyperdisk Balanced or pd-ssd。Cloud SQL なら自動で適切なディスクが選ばれる。
🚨 事故ケース 3: Regional PD のレプリカ遅延で、フェイルオーバー時にデータロス
状況Regional PD でゾーン障害発生、フェイルオーバー直後にトランザクション不整合検出。書込のうち最後の数秒分が失われた。
原因Regional PD は同期だが、レプリカが 「準同期」気味で書込確認後にもごく短時間の遅延がありうる。アプリ側の二重書込防止策が必要。
影響少数トランザクションのロス。
復旧アプリログから再 apply。
再発防止重要トランザクションは 2-phase commit ライクな仕組み or Spanner / Cloud SQL HA を検討。アプリは Idempotent に設計。

13.6 PD/Hyperdisk 運用・保守ベストプラクティス

領域項目推奨
バックアップSnapshot Schedule日次 + 週次 + 月次、保持階層化
Cross-region SnapshotDR 用、別リージョンに自動コピー
Machine ImageVM 全体(複数 PD + メタ)の Snapshot
HA / DRRegional PD / Async RepRPO/RTO 要件に応じて選択
モニタリングDisk IOPSプロビジョン上限の 80% で警告
Disk Throughput同上
Disk Latencyp99 で SLO 監視
容量計画Auto ResizeCloud SQL では自動、自前 VM は要監視

13.7 試験での出題パターン(章13)

🎯 章 13 頻出問題
  • 「最高 IOPS、SAP HANA」→ Hyperdisk Extreme
  • 「スループット最優先、HDFS」→ Hyperdisk Throughput
  • 「ML 学習データを複数 VM に同時マウント」→ Hyperdisk ML
  • 「ゾーン障害時に即座にフェイルオーバー」→ Regional PD
  • 「VM 削除でも消えないバックアップ」→ Snapshot(別リージョン保管)
  • 「揮発性で構わない高速スクラッチ」→ Local SSD

14Filestore — マネージド NFS

Filestore は 「マネージド NFS」で、Compute Engine / GKE / Dataproc / VMware Engine から POSIX 互換でマウントできます。試験では「Tier 選定」「Backup」「NFS v3 vs v4.1」が中心。

14.1 Tier 比較

Tier容量IOPS用途SLA
Basic HDD1〜63.9 TBアーカイブ、開発99.9%
Basic SSD2.5〜63.9 TB汎用99.9%
Zonal1〜100 TB本番、低遅延99.9%(zonal)
Regional1〜100 TB本番 HA99.99%
Enterprise1〜10 TB高 SLA、Regional99.99%
High Scale10〜100 TB非常に高HPC, レンダリング99.9%

14.2 NFS バージョン

全 Tier で NFS v3 サポート。Enterprise tier のみ NFS v4.1 もサポート(ファイルロックなど一部用途で必要)。

14.3 Filestore 事故ケース集

🚨 事故ケース 1: Basic Tier で本番運用、ゾーン障害で完全停止
状況Basic SSD で本番 NFS 運用。ゾーン障害発生、Filestore 完全停止 4 時間。
原因① Basic / Zonal は単一ゾーン。② Regional / Enterprise に移行未実施。
影響NFS マウントしていた全 VM が IO エラー。
復旧Google 復旧待ち。
再発防止本番は Regional or Enterprise Tier(99.99% SLA)。Backup を別リージョンにも。
🚨 事故ケース 2: Backup 未設定で人為的削除
状況運用者が誤って rm -rf で重要ディレクトリ削除。Filestore Backup なし、復旧不能。
原因① Backup Schedule 未設定。② Snapshot Schedule 未設定。
影響本番データ消失。
復旧
再発防止Filestore Backup(日次 Schedule)+ Filestore Snapshot(時間内 PITR 用)。重要マウントは Read-only Bind。

14.4 Filestore 運用・保守

14.5 試験での出題パターン(章14)

🎯 章 14 頻出問題
  • 「複数 VM が同じファイルを POSIX で共有」→ Filestore
  • 「99.99% SLA」→ Regional / Enterprise
  • 「HPC レンダリング、巨大容量・高 IOPS」→ High Scale
  • 「NFS v4.1 必須」→ Enterprise

15データ移行ツール

移行ツールの選定は試験でも頻出です。「何を、どこから、どこへ、どれくらいの規模で」の 4 軸で決まります。

15.1 主要ツール対応表

ツール移行元移行先方式用途
Database Migration Service (DMS)MySQL / PG / SQL Server / OracleCloud SQL / AlloyDB / SpannerContinuous(CDC)+ SnapshotDB 移行
DatastreamOracle / MySQL / PGBigQuery / GCS / PubSubサーバーレス CDC分析パイプライン
Storage Transfer Service (STS)S3 / Azure Blob / オンプレ NFS / GCSGCSスケジュール転送オブジェクト一括
Transfer Applianceオンプレ(巨大)GCS物理ディスク輸送60 TB 超、低帯域
BigQuery Data Transfer ServiceGoogle Ads / YouTube / SaaSBigQuery定期取り込みBI / 広告
BigQuery Migration ServiceTeradata / Redshift / Snowflake / OracleBigQuerySQL 変換 + データ転送DWH 移行
Dataflow / Dataproc任意任意カスタム ETL変換含む移行

15.2 オブジェクト移行の決定ロジック

データサイズと帯域10 Gbps の場合、1 TB ≈ 17 分、10 TB ≈ 3 時間、100 TB ≈ 30 時間
< 10 TB or 高帯域 →
STS Online / gsutil
10〜60 TB →
STS Online(並列 + Resumable)
> 60 TB or 低帯域 →
Transfer Appliance

15.3 DB 移行の決定ロジック

16運用・保守 全体ベストプラクティス

本章はストレージ&DB 全サービス横断の運用視点をまとめた章です。本番設計レビューのチェックリストとして使えます。

16.1 バックアップ戦略マトリクス(全サービス横断)

サービスデフォルト推奨設定保持期間PITR
GCSなしVersioning + Soft Delete + Cross-region コピー30 日〜無期限
Cloud SQL自動バックアップ 7 日自動バックアップ + PITR + Export7〜365 日○(最大 7 日)
AlloyDBContinuous Backup 14 日同上 + Secondary Cluster14〜35 日○(最大 35 日)
SpannerなしBackup(日次)+ Export to GCS最大 1 年—(Backup でカバー)
BigQueryTime Travel 7 日Snapshot + Cross-region Replica + Export2〜7 日 + 無期限○(7 日)
BigtableなしBackup(日次)+ Export to GCS最大 30 日
FirestoreなしScheduled Export + PITR7 日 + GCS 無期限○(7 日, Native mode)
MemorystoreなしAOF / RDB Snapshot日次〜週次
PD / HyperdiskなしSnapshot Schedule(日次 + 週次 + 月次)無期限
FilestoreなしBackup Schedule + Snapshot日次〜—(Snapshot で近似)

16.2 災害復旧(DR)シナリオ別 RTO/RPO

サービスDR 構成RTORPO追加コスト
GCSMulti-region バケット0 秒(透過)0+ ストレージ
GCSCross-region Storage Transfer分単位転送間隔+ Egress
Cloud SQLHA(同 region)~60 秒0+ 100%(standby)
Cloud SQLCross-region Read Replica分単位(手動 promote)レプリカ遅延(数秒)+ 100%/region
AlloyDBSecondary Cluster分単位(promote)数秒+ Secondary 分
SpannerMulti-region 構成0 秒(透過)0+ 5〜10 倍
BigQueryCross-region Dataset Replica分単位非同期遅延+ ストレージ
BigtableMulti-cluster Routing数秒(自動)数秒+ クラスタ数倍
FirestoreMulti-region location0 秒(透過)0+ ストレージ
PDRegional PD分単位0(同期)+ 100%
PDAsync Replication分単位分単位+ 別 region 分

16.3 モニタリング指標まとめ

サービス必須メトリクス閾値の目安
Cloud SQLCPU / Memory / Disk / Replication Lag / Active Connections / Transaction LogsCPU 80% / Mem 85% / Disk 80% / Lag 60s / Conn 80%
AlloyDBCPU / Lag / Connection / Disk IOPSCPU 75% / Lag 10s
SpannerCPU / Lock Wait Time / Throughput / Latency / StorageCPU 65% / Lock Wait 100 ms / Storage 4 TB/node
BigQuerySlot Utilization / Bytes Processed / Job Concurrency / Failed JobsSlot 80% / Failed 5%
BigtableCPU per node / Hottest Node / Read/Write Latency / StorageCPU 70% / Hot Spot 検出
FirestoreRead/Write Ops / Document Size / Rule EvaluationsCustom Quota 設定
MemorystoreMemory / CPU / Hit Ratio / Evicted KeysMem 80% / CPU 70% / Hit < 80%
PD/HyperdiskIOPS / Throughput / Latencyプロビジョン 80%
GCSRequest Count / Bandwidth / Error RateError 1%
FilestoreUsed Bytes % / Ops Count容量 80%

16.4 キャパシティ計画の原則

16.5 パッチ管理

16.6 コスト監視

17試験頻出パターン — ケーススタディ別の推奨構成

PCA 試験では「ケース」が与えられ、最適なストレージ構成を 1 つ選ぶ問題が頻出です。以下にパターン別の正解構成を整理します。

17.1 ケーススタディ別 推奨構成

シナリオ推奨構成判断軸
グローバル EC、ACID 必須、複数大陸ユーザーSpanner Multi-region + Memorystore + GCSグローバル ACID = Spanner 一択
モバイルアプリ、オフライン同期、低遅延通知Firestore Native + GCS + Cloud FunctionsSDK 直結 + リアルタイム = Firestore
IoT 100 万デバイス、秒 100 万書込、時系列Bigtable + Pub/Sub + Dataflow → BigQuery大規模書込 KV = Bigtable
分析・BI、ペタバイト級、SQLBigQuery + BI Engine + LookerDWH = BigQuery
レガシー Oracle 移行、リフト&シフトBare Metal Solution or Cloud SQL(PG/MySQL)+ DMSOracle 互換要件次第
動画ストリーミング、グローバル CDNMulti-region GCS + Cloud CDN + Global LB静的アセット = GCS Multi-region
SaaS バックエンド、中規模 OLTPCloud SQL HA + Memorystore標準 OLTP = Cloud SQL
PG 高負荷 OLTP + 分析(HTAP)AlloyDB(Columnar Engine)HTAP = AlloyDB
HPC レンダリング、巨大共有ファイルFilestore High Scale or GCS FuseNFS POSIX = Filestore
監査ログ、改竄不可、7 年保持GCS + Bucket Lock + Retention 7y + Cloud Logging SinkWORM = Bucket Lock
セッション、リーダーボード、レート制限Memorystore for Redis Cluster低遅延 KV = Memorystore
大規模 ML 学習データを多 VM で共有Hyperdisk ML or GCS + GCS Fuse多 VM Read = Hyperdisk ML

17.2 試験のキーワード反射表

問題文のキーワード反射的に選ぶサービス
「グローバル ACID」「外部強整合」「99.999%」Spanner Multi-region
「ペタバイト」「列指向」「BI」「SQL 分析」BigQuery
「時系列」「IoT」「秒間百万」「低遅延 KV」Bigtable
「モバイル SDK」「リアルタイム同期」「オフライン」Firestore Native
「MySQL」「PostgreSQL」「SQL Server」「マネージド」Cloud SQL
「PG 高性能」「HTAP」「Columnar Engine」AlloyDB
「静的アセット」「データレイク」「アーカイブ」GCS
「NFS」「POSIX」「共有マウント」Filestore
「キャッシュ」「セッション」「リーダーボード」Memorystore
「Oracle」「VMware」「リフト&シフト」Bare Metal / VMware Engine
「改竄不可」「WORM」「監査ログ保管」GCS Bucket Lock
「コスト最適化」「自動階層化」GCS Autoclass / Lifecycle
「PCI-DSS」「HIPAA」「コンプライアンス」CMEK + VPC-SC + Audit Log

18アンチパターン総集編

サービス横断で「やってはいけない設計」を一覧化します。本番リリース前のレビューチェックリストとして使えます。

18.1 GCS アンチパターン

❌ Versioning なし + Lifecycle で即削除

誤操作・バグで全データ消失リスク。Bucket Lock もなしだと監査面でも危険。

✅ Versioning + Soft Delete + Lifecycle

本番は最低 Versioning。重要バケットは Bucket Lock + Retention Policy。

❌ 連番ファイル名で秒間 5000 アップロード

シャーディングが効かず 503 Too Many Requests 発生。

✅ ハッシュプレフィックス命名

{hash}-{date}-{name} でアップロードを分散。

18.2 Cloud SQL アンチパターン

❌ Public IP + 弱パスワード

侵害リスク、コンプライアンス違反。

✅ Private IP + Auth Proxy + IAM 認証

VPC 内のみ、ID 連動で透過認証。

❌ Long-running Transaction を多用

Replication Lag 増大、ロック競合、デッドロック頻発。

✅ 小さな commit、バッチはチャンク分割

1 Transaction = 1 論理単位、長くても数秒。

18.3 Spanner アンチパターン

❌ 主キー先頭に単調増加(連番 / timestamp)

1 split に書込集中、ノード追加してもスケールしない。

✅ ハッシュプレフィックス or UUIDv4

負荷分散、線形スケール。Key Visualizer で検証。

❌ Read-Write Transaction 内で大量 Read

ロック保持時間が長く、競合多発。

✅ Read-only Transaction で事前 Read

書込対象のみ Read-Write、それ以外は ReadOnly。

18.4 BigQuery アンチパターン

SELECT * + Partition なし

巨額スキャン課金、コスト事故。

✅ 必要列のみ + Partition + Cluster

Partition Pruning + 列スキップでコスト 90% 減も。

❌ Streaming Insert + insertId 未指定

重複行発生、データ品質劣化。

✅ Storage Write API(exactly-once)

新規開発は Storage Write API、低コスト + 確実。

18.5 Bigtable アンチパターン

❌ タイムスタンプ先頭 Row Key

hot tablet、書込 QPS 頭打ち。

✅ ハッシュプレフィックス + Reverse Timestamp

分散書込 + 最新行が連続。

❌ Single-cluster で本番

ゾーン障害でダウン、Replication なし。

✅ Multi-cluster Routing

自動フェイルオーバー、Read 負荷分散。

18.6 Firestore アンチパターン

❌ 成長する配列を 1 ドキュメントに

1 MB 上限超過、書込失敗。

✅ Subcollection で水平分解

個別書込、ドキュメントサイズ管理可能。

❌ 1 ドキュメント = グローバルカウンター

1 書込/秒 上限で詰まる。

✅ Distributed Counter(N シャード)

水平分散、合計は読み取り時。

18.7 Memorystore アンチパターン

❌ メモリ 95% 使用 + AOF

AOF rewrite で OOM、インスタンス停止。

✅ メモリ 50% を空ける + eviction policy

rewrite buffer の余裕、allkeys-lru で自動調整。

❌ Persistence なしで重要データ

再起動で全消滅、DB 過負荷の連鎖。

✅ AOF everysec + HA tier

RPO 1 秒、Standby で自動 Failover。

18.8 PD/Hyperdisk アンチパターン

❌ Snapshot なし + auto-delete=true

VM 削除でデータ消失、復旧不能。

✅ Snapshot Schedule + auto-delete=false

日次自動 Snapshot、削除リスク隔離。

❌ pd-standard で本番 DB

IOPS 不足、慢性遅延。

✅ Hyperdisk Balanced or pd-ssd

適切な IOPS、必要に応じてライブ調整。

19クォータと制限の一覧(早見表)

19.1 GCS

項目制限
1 オブジェクトの最大サイズ5 TiB
バケット名の最大文字数63 文字(DNS 互換)
初期書込スループット1,000 WPS / 5,000 RPS(auto-scaling で上昇)
Composite Object のソース数32
Bucket Lock Retention最大 100 年

19.2 Cloud SQL

項目制限
最大ストレージ64 TB
最大 vCPU128 (Enterprise Plus)
Read Replica 上限10(MySQL/PG)
HA SLA99.95%
Automated Backup 保持1〜365 日
PITR 保持1〜7 日

19.3 AlloyDB

項目制限
Primary 最大 vCPU128
Read Pool 最大ノード20
Continuous Backup 保持14〜35 日
SLA99.99%(Regional)

19.4 Spanner

項目制限
最小 Processing Unit100 PU
ノード当りストレージ4 TB
Interleaved Table 階層最大 7(推奨 2-3)
Multi-region SLA99.999%
Regional SLA99.99%
Backup 保持最大 1 年
Read-Write Transaction最大 10 分

19.5 BigQuery

項目制限
クエリタイムアウト6 時間
1 テーブル最大 Partition 数10,000
Streaming Insert 行サイズ10 MB
Time Travel2〜7 日
同時クエリ(On-demand)100 / プロジェクト
Reservation 最小 slots50(Standard)/ 100(Enterprise)

19.6 Bigtable

項目制限
Row Key 最大長4 KB
Cell(値)最大サイズ100 MB
1 行の最大セル数10,000
Column Family 最大数100
クラスタ最大ノード数30 (default quota, 拡張可)
1 Instance 最大クラスタ数8
SSD Storage/Node5 TB(target 2.5 TB)
HDD Storage/Node16 TB(target 8 TB)

19.7 Firestore

項目制限
1 Document 最大サイズ1 MiB
1 Document への持続書込1 回 / 秒
Composite Index 書込500 / 秒(推奨)
Transaction 最大書込500 ドキュメント
1 Project 最大 Database 数100
Subcollection 階層100
Realtime Listener 同時接続100 万

19.8 Memorystore

項目制限
Standard 最大メモリ300 GB
Cluster 最大シャード250
Cluster 最大 Replica/shard5
SLA99.9%(Basic)/ 99.99%(HA, Cluster)

19.9 PD / Hyperdisk

項目制限
PD 最大サイズ64 TB
Hyperdisk Balanced IOPS2,500 〜 160,000 (調整可)
Hyperdisk Extreme IOPS最大 350,000
Snapshot 保持無期限
Local SSDVM ごとに 9 TB まで

19.10 Filestore

項目制限
Basic 容量1〜63.9 TB
Enterprise 容量1〜10 TB
High Scale 容量10〜100 TB
Enterprise SLA99.99%