Deep Dive: Storage & Database
Professional Cloud Architect 試験で問われるストレージ&DB全領域を、公式ドキュメントベースで技術深掘りします。GCS / Filestore / Cloud SQL / AlloyDB / Spanner / BigQuery / Bigtable / Firestore / Memorystore / Persistent Disk / Hyperdisk を、SLA・クォータ・アンチパターン・コスト設計まで完全網羅。
オブジェクト= 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 key、Spanner の単調増加プレフィックス、GCS の連番ファイル名。これらは必ず回避してください。
📚 参照する公式ドキュメント
本資料は以下の Google Cloud 公式ドキュメント(2026 年時点)から技術詳細・制限・SLA・ベストプラクティスを抽出しています。各章で都度引用と URL を併記します。
1ストレージ全体像 — 7 つの分類
Google Cloud のデータストアは、形(オブジェクト・ファイル・ブロック)とクエリ特性(KV・リレーショナル・ドキュメント・分析)と速度(永続・キャッシュ)の組合せで 7 カテゴリに分類できます。試験では「データ構造」と「整合性要件」と「スケール特性」の 3 つで一意に絞り込めるよう、各カテゴリの代表サービスを最初に頭に入れます。
1.1 7 カテゴリと代表サービス(SVG 図解)
1.2 データ構造で即決する判定表
| データの形 | 第一候補 | 代替 | 典型用途 |
|---|---|---|---|
| 画像 / 動画 / バックアップ / ログファイル | GCS | — | 静的アセット、データレイク |
| POSIX 共有ファイル(NFS マウント) | Filestore | GCS Fuse(読み中心の場合のみ) | レンダリング、HPC、ML 学習データ |
| VM のブロックボリューム | Hyperdisk / PD | Local SSD(揮発許容のみ) | OS、DB、キャッシュディスク |
| JOIN 多い OLTP(〜数 TB) | Cloud SQL | AlloyDB(PG 高負荷) | SaaS バックエンド、ECサイト |
| グローバル ACID、TPS 数万+ | Spanner | — | 金融、グローバル EC、グローバル SaaS |
| 大規模 KV / 時系列 / メトリクス | Bigtable | — | IoT センサー、広告クリック、財務 tick |
| モバイル/Web のリアルタイム同期 | Firestore (Native) | — | チャット、コラボツール、IoT 制御 |
| 分析 / DWH / レポート | BigQuery | — | BI、ML 学習、Ad-hoc 分析 |
| セッション・キャッシュ | Memorystore | — | レート制限、リーダーボード、JWT 検証 |
2ストレージ選定 完全決定フロー
試験シナリオでは「グローバル展開」「ACID 必須」「秒間 100 万 QPS」「<10 ms レイテンシ」など複数条件が同時に提示されます。以下のメイン決定ツリーを暗記し、矛盾する条件があった時の判断軸まで身につけます。
2.1 メイン決定ツリー(SVG 図解)
2.2 整合性・スケールの 4 象限マップ
| スケール / 整合性 | 強整合性 | 結果整合性 / なし |
|---|---|---|
| 単一リージョン | Cloud SQL / AlloyDB / Firestore (Native) | Memorystore(永続化なし) |
| マルチリージョン | Spanner(外部強整合)/ Firestore Multi-region | Bigtable Multi-cluster Routing / GCS Multi-region |
2.3 規模・コスト感の早見表
| サービス | 規模上限の目安 | コスト感(小規模時) | コスト感(大規模時) |
|---|---|---|---|
| Cloud Storage | 無制限 | 圧倒的に安い($0.02/GB/月〜) | Lifecycle で更に削減可能 |
| Cloud SQL | 64 TB / 数百 GB RAM | スタータ $7〜/月 | HA で 2 倍、Read Replica で更に増 |
| AlloyDB | マネージドで PB クラスまで | 最小 2 vCPU〜(数百ドル/月〜) | Cloud SQL より高速 → 単価高でも TCO 安 |
| Spanner | 無制限(水平スケール) | 100 PU = $65/月〜(旧 1 ノードは高額) | PU 単位で精密スケール可能 |
| BigQuery | PB クラス対応 | On-demand $6.25/TB スキャン | Editions で予約 → コスト固定化 |
| Bigtable | PB クラス対応 | 最低 1 ノード(数百ドル/月) | スケール時の単価効率が良い |
| Firestore | 無制限 | 無料枠あり、Reads/Writes 課金 | 高 RPS で意外と高額に |
| Memorystore | 1 GB〜数百 GB | 時間課金 | RAM サイズに比例 |
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 年ログアーカイブ |
3.2 ロケーション 3 種(Region / Dual-region / Multi-region)
単一リージョン
1 リージョン内の複数ゾーンで冗長化。最も低料金で低レイテンシ。リージョン障害時は不可用。
SLA: Standard 99.9% / その他 99.0%
例: asia-northeast1
2 リージョン
指定した 2 つの近接リージョン間で同期。Turbo Replication でアジア-米のような遠距離も対応。
SLA: Standard 99.95% / その他 99.9%
例: asia1, nam4
大陸単位
大陸(asia, eu, us)の複数リージョンに冗長化。グローバル CDN ライクな低レイテンシ。最も堅牢で最も高額。
SLA: Standard 99.95%
例: asia, eu, us
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 | 指定日付より前に作成 |
customTimeBefore | Custom Time メタデータが指定日付より前 |
daysSinceCustomTime | Custom Time から経過日数 |
daysSinceNoncurrentTime | 非現行になってからの経過日数 |
noncurrentTimeBefore | 非現行になった日が指定日付より前 |
isLive | 現行版か非現行版か |
numNewerVersions | このオブジェクトより新しい版が N 個以上ある |
matchesPrefix / matchesSuffix | オブジェクト名の前方/後方一致 |
matchesStorageClass | 指定クラスに保管されている |
📖 典型的な 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 の動作(公式仕様)
3.4.2 Autoclass vs Lifecycle どちらを選ぶか
✅ Autoclass 向き
アクセス頻度が予測不能、データの「冷温」が分からない、外部スキャンが少ない、運用工数を削減したい。「とりあえずバケットに置いておけばクラスは自動で最適化される」状態を作りたい場合に最適。
❌ Autoclass 不向き
「大半のデータがホット or 大半がコールド」と分かっているケース(Lifecycle で明示制御の方がコスト最適)。外部サービスが定期的にバケット内を全件スキャンするケース(アクセス検出で Standard に戻ってしまう)。Lifecycle で SetStorageClass/matchesStorageClass を使いたい場合(共存不可)。
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 の挙動
- Retention 期間中はオブジェクトを 削除も上書きもできない(IAM 権限があっても)
- 各オブジェクトに
retentionExpirationTimeメタデータが付与される - 最大保持期間は 100 年(3,155,760,000 秒)
- 未ロック時は Retention 期間を「減らす・削除する」が可能
- ロック後は増やすことのみ可能、減らす・解除は永久不可
- バケット削除は、全オブジェクトの retention 満了後にしかできない
3.5.2 関連機能との違い
| 機能 | 用途 | 解除可能? |
|---|---|---|
| Retention Policy(未ロック) | ポリシー単位の保持期間 | 可能 |
| Retention Policy + Bucket Lock | 規制対応の不可逆保持 | 不可(永久) |
| Object Hold(Event-based) | イベント単位の一時保持 | 可能 |
| Object Hold(Temporary) | 個別オブジェクトの一時保持 | 可能 |
| Object Versioning | 上書き・削除の世代保管 | 可能 |
| Soft Delete(デフォルト 7 日) | 誤削除の保護 | 可能(リカバリ) |
--retention-period を 必ず QA 環境で 1 週間運用してから本番適用するのが鉄則。
3.6 セキュリティ機能まとめ
| 機能 | 概要 | 選定基準 |
|---|---|---|
| IAM | バケット / プロジェクト / オブジェクト単位の権限 | 基本。roles/storage.objectViewer 等 |
| ACL(非推奨) | オブジェクト単位の細粒度権限 | レガシー互換のみ、新規は IAM |
| Uniform Bucket-level Access | ACL を無効化し IAM 一本化 | 本番では必ず有効化 |
| CMEK | Cloud KMS で管理する暗号化キー | 規制要件、キーローテーション制御 |
| CSEK | 顧客が自前で持ち込む暗号化キー | 究極の管理権限が必要なケースのみ |
| Signed URL | 時限付き署名で外部に一時公開 | サインアップなしで限定公開ダウンロード |
| VPC Service Controls | 境界を作って exfiltration を防止 | 機密データ・PHI/PII |
| Bucket IP Filtering | 送信元 IP 制限 | 本社 IP のみアクセス許可など |
| Object Versioning | 上書き / 削除の世代保管 | 誤操作対策 |
| Soft Delete | 削除後 7 日(既定)で復元可能 | 誤削除対策(既定で ON) |
3.7 試験での出題パターン(章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 つのオブジェクトに結合する仕組みです。
- 結合元の各パートは個別オブジェクトとして一時保存される(後でクリーンアップが必要)
- 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 でエッジキャッシュを効かせるのが定石です。
4.5 試験での出題パターン(章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 の事故シナリオです。一般化したパターンとして、設計レビューのチェックリストに使えます。
| 状況 | 開発者がデモ用に allUsers に Storage 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 確認。 |
| 状況 | ストレージコスト削減のため 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。 |
| 状況 | デプロイミスでアプリが空ファイルを既存オブジェクト名で大量 PUT。Versioning 無効のため上書き=旧データ消滅。 |
|---|---|
| 原因 | ① Object Versioning 無効。② Soft Delete(2023 以降の新機能)未有効化。 |
| 影響 | 本番データ全消失、サービス停止。 |
| 復旧 | Soft Delete 有効なら 7 日以内に gcloud storage objects restore。それも無ければ DR バケットからリストア。 |
| 再発防止 | 本番バケットは Versioning + Soft Delete(最小 7 日推奨)を必ず有効化。Cross-region のレプリカもしくは Storage Transfer の定期コピーで二重化。 |
| 状況 | CSEK 鍵を社内 Wiki にメモしていたが、Wiki 移行時に鍵情報を紛失。Google は CSEK を保管しないため復号不能。 |
|---|---|
| 原因 | ① CSEK の運用責任(鍵管理)を顧客が負うことの理解不足。② 鍵バックアップなし。 |
| 影響 | 暗号化されたオブジェクト全件が永久に読めない。 |
| 復旧 | 不可。 |
| 再発防止 | CSEK ではなく CMEK(Cloud KMS 管理)を使用する。CMEK ならローテーション・監査・冗長化が自動。CSEK が必須要件以外は使わない。 |
| 状況 | US リージョンのバケットを Asia の Dataflow ジョブから毎時参照。Egress 料金が月数百万円。 |
|---|---|
| 原因 | ① バケットとコンピュートのリージョン不一致。② Multi-region との違いを誤認識。 |
| 影響 | 予期せぬ高額請求。 |
| 復旧 | 同リージョンに新バケットを作成し、Storage Transfer で移動。 |
| 再発防止 | Budget Alert(閾値超過で SNS/Slack 通知)と、Recommender の「Cross-region egress detected」を監視。 |
4.Y GCS 運用・保守ベストプラクティス
| 領域 | 項目 | 推奨設定 |
|---|---|---|
| バックアップ | Object Versioning | 本番バケット必須、保持 30 日推奨 |
| Soft Delete | 2024年以降デフォルト有効、7〜90 日 | |
| Cross-region コピー | Storage Transfer Service で日次レプリカ | |
| モニタリング | Request Count / Error Rate | storage.googleapis.com/api/request_count |
| Bandwidth | Egress 増加を Budget Alert で検知 | |
| Access Log | Data 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 主要スペック早見表
| 項目 | MySQL | PostgreSQL | SQL Server |
|---|---|---|---|
| 主要バージョン | 5.6 / 5.7 / 8.0 / 8.4 | 9.6 〜 16 | 2017 / 2019 / 2022 (Enterprise/Standard/Web/Express) |
| 最大ストレージ | 64 TB | 64 TB | 64 TB |
| 最大 vCPU | 96 (Enterprise Plus は 128) | 96 | 96 |
| 最大 RAM | 624 GB+ (Enterprise Plus) | 624 GB+ | 624 GB+ |
| HA SLA | 99.95%(Enterprise+) | 99.95%(Enterprise+) | 99.95% |
| Single Zone SLA | 99.5% | 99.5% | 99.5% |
| Read Replica | 10 個 + Cascading | 同左 | 同左 |
| PITR | 対応(バックアップ + WAL) | 対応 | 対応 |
5.2 Edition の差分(Enterprise / Enterprise Plus)
標準エディション
これまでの Cloud SQL を継承。HA 構成で 99.95% SLA、最大 96 vCPU、ストレージ 64 TB。多くのワークロードはこちらで十分。
追加機能: Backup 自動化、自動メンテナンス、Cloud SQL Auth Proxy
高性能エディション
低レイテンシ(書込最大 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)
5.3.2 HA の重要メトリクス
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:地理的近接読込、DR 用途
- Cascading Replicas:プライマリ + 4 レベルまでのチェーンで、プライマリへの replication 負荷を軽減
- External Read Replica:Google Cloud 外の MySQL に複製可能(外向き転送料金あり)
❌ アンチパターン
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 バックアップ | 別リージョンに保存 | 選択可 |
| クローン | バックアップ不要でコピー作成 | — |
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 の起動コマンド例
# インスタンス接続名を確認
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
- 毎週 1 回の自動メンテナンス(ストレージ拡張・パッチ適用等)
- 曜日と時間を
--maintenance-window-day/--maintenance-window-hourで指定 - メンテナンス通知を 1 週間前に受信可能
- Enterprise Plus は Near-Zero Downtime メンテナンス(<10 秒)を提供
- Maintenance Reschedule で「来週・後で・今すぐ」を選択可能
5.8 試験での出題パターン(章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 事故ケース集
| 状況 | テスト用に作ったインスタンスを本番昇格させた際、自動バックアップが OFF のまま。Maintenance Window で OS パッチが当たり、ファイルシステム異常で全データ消失。 |
|---|---|
| 原因 | ① 自動バックアップ未有効。② PITR(バイナリログ)も未有効。③ 「テスト用デフォルト」を本番にコピー。 |
| 影響 | 1 週間分のトランザクションロス、サービス停止 48 時間。 |
| 復旧 | アプリログから手動で再構築(不完全)。 |
| 再発防止 | 本番作成時の必須チェックリスト:自動バックアップ ON + PITR ON + リテンション 7 日以上 + HA 有効。Terraform モジュール化して人為ミスを排除。 |
| 状況 | コスト削減のため HA を OFF にしていた本番 DB。ゾーン障害発生、Google による復旧待ちで 6 時間サービス停止。 |
|---|---|
| 原因 | HA 構成(standby を別ゾーンに)未設定。 |
| 影響 | SLA 補償対象外(HA なしの SLA は 99.95% ではなく 99.5%)、機会損失。 |
| 復旧 | Cross-region Read Replica を昇格させる手順を実施したが、レプリカ遅延分のデータロス。 |
| 再発防止 | 本番は必ず HA 有効化(standby を別ゾーン)。SLO ベースで HA コストを正当化。 |
| 状況 | 夜間バッチが 4 時間の巨大トランザクションを実行。Read Replica にバイナリログが届かず lag が 4 時間に。タイミング悪くプライマリ障害発生。 |
|---|---|
| 原因 | ① Long-running Transaction の存在。② Replication Lag のアラートなし。 |
| 影響 | レプリカ昇格時に 4 時間分のデータが欠落。 |
| 復旧 | バイナリログを別途取得して手動 apply。 |
| 再発防止 | バッチはチャンク分割(commit 単位を小さく)。cloudsql.googleapis.com/database/replication/replica_lag でアラート設定(閾値 60 秒)。 |
| 状況 | 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)。 |
| 状況 | 本番 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 / DR | HA(regional) | 本番必須、RTO 約 60 秒 |
| Cross-region Read Replica | DR 用、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 図解)
6.2 Cloud SQL PG との決定的な違い
| 項目 | Cloud SQL for PG | AlloyDB |
|---|---|---|
| コンピュート/ストレージ | 密結合 | 分離(disaggregated) |
| Read Replica | 最大 10 個(個別インスタンス) | Read Pool 最大 20 ノード(プール化) |
| HA SLA | 99.95% | 99.99% |
| Columnar Engine | なし | あり(HTAP) |
| パフォーマンス | 標準 | トランザクション約 4 倍、分析クエリ最大 100 倍 |
| AI/ML 統合 | 限定 | AlloyDB AI(vector / scann / google_ml_integration) |
| Cross-Region DR | Read Replica で実現 | Secondary Cluster(非同期) |
| 最小コスト | マイクロインスタンスから | 最小 2 vCPU〜(高め) |
| 互換性 | PostgreSQL 100% | PostgreSQL 100%(拡張機能) |
6.3 Columnar Engine — HTAP の鍵
Columnar Engine は、Primary や Reader のメモリ内に列指向フォーマットの「シャドウデータ」を保持し、同じテーブルに対して行指向 OLTP と列指向 OLAP を同時にサポートします。設定は対象テーブル/列を指定するだけで、リアルタイムに同期されます。
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)
- 「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 事故ケース集
| 状況 | Database Migration Service で AlloyDB 移行完了。アプリの一部マイクロサービスだけ接続文字列が古いまま、Cloud SQL 旧インスタンスに書き続けた。 |
|---|---|
| 原因 | ① 接続文字列が複数サービスでハードコード。② 移行後の切替リハーサル不十分。 |
| 影響 | 新旧 DB のデータ不整合、調整に 1 週間。 |
| 復旧 | 旧 DB の差分を抽出し AlloyDB に手動同期。 |
| 再発防止 | 接続文字列は Secret Manager に一元化、Cutover 直後に旧 DB を Read-only 化。DMS の Promote 直後にアプリ向け先変更を確認するスクリプト。 |
| 状況 | 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% バッファ。負荷テスト必須。 |
| 状況 | 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 + PITR | 14 日(最大 35 日) |
| DR | Secondary Cluster(Cross-Region) | RPO 数秒、RTO 数分 |
| モニタリング | CPU Utilization | > 75% で警告 |
| Replication Lag | > 10 秒で警告 | |
| Connection Count | 上限 80% | |
| Disk IOPS | Performance 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 内部アーキテクチャの本質
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 |
7.3 マルチリージョンの代表構成
| Config ID | Read-Write リージョン | Witness | 用途 |
|---|---|---|---|
nam3 | us-east4, us-east1 | us-central1 | 北米東部冗長 |
nam6 | us-central1, us-east1 | us-east4 等 | 北米広域 |
nam-eur-asia1 | 米国, 欧州, アジア | — | 真のグローバル(最高 5 nines) |
eur5 | europe-west1, europe-west4 | europe-north1 | EU 内冗長 |
asia1 | asia-northeast1, asia-northeast2 | asia-northeast3 | 日本+韓国 |
7.4 ホットスポット回避(主キー設計)
Spanner で最も犯しやすく、最も致命的なミスが 「単調増加プライマリキー」です。タイムスタンプや auto_increment 風の整数を先頭に置くと、すべての書込が 同一 Split(最も末尾のシャード)に集中し、水平スケールできません。
❌ アンチパターン
主キー(先頭列)に TIMESTAMP、SERIAL、ユーザーが連番で増える 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 | 機能 | 用途 |
|---|---|---|
| Standard | Regional, dual-region | 低価格、単一地域 OLTP |
| Enterprise | + Backup/Restore 強化、CMEK、データ Boost | 本番 OLTP |
| Enterprise Plus | + Multi-region 構成、Cross-Region 機能 | グローバル展開、99.999% SLA 要件 |
7.8 試験での出題パターン(章7)
- 「グローバル ACID、99.999% SLA」→ Spanner Multi-region (Enterprise Plus)
- 「ユーザーごとに行が増えていく、最新を頻繁にクエリ」→ 主キー先頭にハッシュプレフィックス
- 「親子テーブルの JOIN 性能を最適化」→ Interleaved Table
- 「PostgreSQL からの移行」→ Spanner PG ダイアレクト
- 「水平スケールするがコストを精密に制御」→ Processing Unit(100 PU 単位)
7.9 Spanner 事故ケース集
| 状況 | 注文テーブルの主キーに 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 でアラート。 |
| 状況 | パフォーマンス目的で Customer → Order → OrderItem → ItemDetail と 4 階層 Interleave。実際のクエリで Customer のみ取得する場合も子テーブル全体がスキャン対象に。 |
|---|---|
| 原因 | ① Interleaved Table の階層を 7 まで作成(推奨は 2-3)。② アクセスパターンと不一致。 |
| 影響 | クエリレイテンシ悪化、Storage 効率も悪化。 |
| 復旧 | 子テーブルを独立化、Foreign Key で関係を保つ設計に再構築。 |
| 再発防止 | Interleave は 常に親と JOIN する子テーブルに限定。深さは 2-3 まで。 |
| 状況 | 「在庫数取得 → 計算 → 更新」を 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 メトリクスを監視。 |
| 状況 | 当初 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 GCS | Dataflow テンプレートで月次、長期保管用 | |
| モニタリング | CPU Utilization | > 65% で警告(自動スケール推奨) |
| Lock Wait Time | > 100 ms で警告 | |
| Read/Write Latency | p99 を 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 図解)
8.2 ストレージの 3 階層
| 階層 | 条件 | 料金(参考) | 機能制限 |
|---|---|---|---|
| Active Storage | 過去 90 日に変更あり | $0.02/GB/月 | 制限なし |
| Long-term Storage | 90 日連続で変更なし | $0.01/GB/月(50% OFF 自動) | 機能は同じ(読込・更新・コピー OK) |
| Physical Storage Billing | 圧縮後サイズで課金 | 圧縮率次第で更に削減 | 論理サイズ課金との切替式 |
8.3 課金モデル — On-demand vs Editions
「BigQuery offers dual pricing: on-demand per-query charges or capacity-based reservations.」 — BigQuery Reservations
クエリスキャン量で課金
$6.25 / TB スキャン(既定料金)。初期費用なし、即時起動。月 1 TiB の無料枠あり。
適合: 開発、PoC、月間スキャン量が予測しづらい中小規模
リスク: SELECT * 一発で巨額請求
スロット予約で固定料金
Standard / Enterprise / Enterprise Plus の 3 段階。スロット数を予約(baseline + autoscale max)し、時間課金。1 年/3 年コミットで割引。
適合: 月間スキャンが安定して大量、本番ワークロード
メリット: 予算固定、スロット使い切り効率化
8.3.1 Editions の機能差分
| 機能 | Standard | Enterprise | Enterprise Plus |
|---|---|---|---|
| SQL クエリ | ✅ | ✅ | ✅ |
| Streaming Inserts | — | ✅ | ✅ |
| Materialized View | — | ✅ | ✅ |
| BI Engine | — | ✅ | ✅ |
| BigQuery ML | — | ✅ | ✅ |
| Multi-region データセット | — | — | ✅ |
| CMEK | — | — | ✅ |
| VPC Service Controls | — | — | ✅ |
| Cross-Region 災害復旧 | — | — | ✅ |
8.3.2 Reservation の構造
- Capacity Commitment:1 年 / 3 年 コミットで割引購入(Flex Slots は廃止)
- Reservation:プロジェクトに割り当てるスロットの「箱」
- Baseline Slots:常時確保される最小スロット数
- Max Slots(Autoscaler):需要に応じて自動拡張する上限
- Assignment:プロジェクト/フォルダ/組織を Reservation に紐付け
8.4 Partitioning + Clustering(コスト削減の双璧)
8.4.1 Partitioning の 3 方式
| 方式 | パーティションキー | 用途 |
|---|---|---|
| Time-unit Column | DATE / TIMESTAMP / DATETIME 列 | イベント発生日でクエリする場合(最も一般的) |
| Integer Range | INT64 列の範囲 | 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
8.6 BigQuery Omni(マルチクラウドクエリ)
BigQuery Omni は、Amazon S3 / Azure Blob 上のデータを「データを GCP に動かさずに」BigQuery 構文でクエリできる機能です。AWS リージョン内に Anthos クラスタを Google が管理して BigQuery エンジンを動かす方式。
- S3 / Blob のデータをそのまま SQL でクエリ
- クロスクラウド転送:
EXPORT DATAで結果を S3/Blob/GCS に出力可能 - マルチクラウド戦略・規制でデータ移動できないケースに有効
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 |
| 生成 AI | ML.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'"
);
8.9 試験での出題パターン(章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 大ルール(暗記必須)
- SELECT * は絶対禁止:必要な列だけを明示。BigQuery は列指向なので、列を絞れば線形にコスト削減。
- 必ず Partition を切り、クエリで WHERE 句にパーティション列を含める:パーティションプルーニングで読込量を 1/100〜1/1000 に削減。
- Cluster で高カーディナリティ列(user_id 等)を並べ替え:パーティション内ブロックも skip 可能に。
- 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 コスト削減
- 古いパーティションの自動削除:
partition_expiration_daysで N 日経過後に自動削除 - Long-term Storage の自動適用:90 日変更なしで自動 50% OFF
- Physical Storage Billing:圧縮率が良いテーブルは切替で 50-80% 削減
- External Tables の活用:頻度の低いデータは GCS にコールド保管し、必要時のみ External Table でクエリ
9.4 試験での出題パターン(章9)
- 「BigQuery で月数千ドルの請求事故」→ SELECT * 廃止 + Partition + Cluster + Dry Run
- 「個人開発者が誤って暴走クエリ」→ Custom Quota(ユーザー単位)
- 「予算を絶対超えたくない」→ Editions(Reservation)で固定化
- 「過去 30 日のみ分析、それ以前は削除」→ partition_expiration_days = 30
- 「圧縮率が高いテーブル」→ Physical Storage Billing
9.X BigQuery 事故ケース集
| 状況 | 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 経由に切替。 |
| 状況 | insertId 未指定で tabledata.insertAll を使用。クライアント側リトライで同一行が複数回挿入され、レポート集計が二重カウント。 |
|---|---|
| 原因 | insertId による de-duplication 未使用。 |
| 影響 | 分析データの信頼性喪失。 |
| 復旧 | 重複検出 SQL(ROW_NUMBER())で除去、補正テーブル作成。 |
| 再発防止 | insertId を必ず指定(exactly-once)。新規開発は Storage Write API(exactly-once 標準)を使う。 |
| 状況 | US Dataset を Tokyo に毎日同期。1 回 5 TB の Egress で月数十万円。 |
|---|---|
| 原因 | ① 同期頻度の見直し不足。② Authorized View や Cross-region Replica の代替案未検討。 |
| 影響 | 転送料金が想定外に膨張。 |
| 復旧 | 同期頻度を週次に削減 + 差分のみ転送(パーティション単位)。 |
| 再発防止 | BigQuery Cross-region Dataset Replica(マネージド、効率的)を使用。もしくは Dataset を 1 リージョンに統一。 |
| 状況 | 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 Travel | 2〜7 日(変更不可) |
| Table Snapshot | 長期保管、低コスト(差分のみ課金) | |
| Export to GCS | 月次フル Export、Archive クラス | |
| DR | Cross-region Dataset Replica | マネージド非同期レプリカ |
| モニタリング | Slot Utilization | Reservation 別に監視 |
| Bytes Processed | クエリ別、ユーザー別を INFORMATION_SCHEMA で集計 | |
| Job Concurrency | 並列ジョブ数の上限監視 | |
| Failed Jobs Rate | 5% 超でアラート | |
| コスト監視 | Custom Quota | ユーザー / プロジェクト単位の日次上限 |
| Maximum Bytes Billed | クエリ単位の上限(デフォルト or 設定) | |
| Budget Alert | BigQuery 専用ラベルで個別予算 |
📋 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 図解)
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 設計原則のまとめ
- Row Key は 4 KB 以下(推奨はもっと短く)
- delimiter(
#)で複数フィールドを連結 - 先頭は 高カーディナリティ列(device_id, user_id 等)
- 順序スキャン(時系列)が必要なら Reverse Timestamp(
Long.MAX_VALUE - ts) - 頻繁に更新する単一行を避ける(同じ行への上書きは tablet 圧縮負荷)。代わりに新規行を時刻付きで作成
- Column Family は最大 100 個推奨、名前は短く
10.3 Multi-cluster Routing と Replication
Bigtable のインスタンスは 1 つのインスタンスに最大 8 個のクラスタ(リージョン横断含む)を持てます。「Multi-cluster Routing」を有効にすると、クライアントは最も近い健全なクラスタに自動接続し、フェイルオーバーが透過的に行われます。
10.4 SSD vs HDD ノード
| 項目 | SSD | HDD |
|---|---|---|
| 料金(ノード単価) | 標準 | 約 1/5 |
| レイテンシ | 数 ms | 数十〜数百 ms |
| 用途 | 本番 OLTP / リアルタイム | アーカイブ、低頻度バッチ |
| QPS 上限 | 高 | 低 |
| 変換 | 後から変換不可(新インスタンス + データコピー) | |
10.5 Autoscaling
Bigtable は CPU 使用率と Storage 使用率を監視し、ノード数を自動 +/- する Autoscaling をサポート。最小・最大ノード数と「CPU 目標 %」を指定するだけ。
10.6 試験での出題パターン(章10)
- 「時系列で書込 QPS が伸びない」→ Row Key の先頭をハッシュプレフィックス化
- 「IoT 100 万デバイス、秒 100 万書込、低レイテンシ」→ Bigtable + Autoscaling
- 「HBase からの移行」→ Bigtable(HBase API 互換)
- 「リージョン障害時も自動切替」→ Multi-cluster Routing(Multi-region 構成)
- 「コスト最優先、レイテンシ緩い」→ HDD ノード(変更不可なので慎重に)
10.7 Bigtable 事故ケース集
| 状況 | 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)を監視。 |
| 状況 | 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 を監視。 |
| 状況 | 運用スクリプトのバグで本番テーブルを 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 / DR | Multi-cluster Replication | 2-3 クラスタ、Multi-cluster Routing |
| モニタリング | CPU per node | > 70% で警告(自動スケール推奨) |
| Hottest Node CPU | クラスタ平均との乖離で hot spot 検出 | |
| Read/Write Latency p99 | SLO ベースで監視 | |
| Storage Utilization | SSD: 2.5 TB/node, HDD: 8 TB/node | |
| 容量計画 | Autoscaling | CPU 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 mode | Datastore mode |
|---|---|---|
| 用途 | 新規開発、モバイル/Web | Datastore からの後方互換 |
| リアルタイムリスナー | ○ | × |
| クライアント SDK | iOS/Android/Web 直結 | サーバー経由のみ |
| 強整合性 | 単一ドキュメント + クエリ | Entity Group 内のみ |
| スループット | 水平スケール(自動) | 水平スケール(自動) |
11.2 データモデル — Collection / Document / Subcollection
- Collection:ドキュメントのコンテナ。スキーマレス
- Document:JSON ライクなフィールドの集まり、最大 1 MB
- Subcollection:ドキュメントの下にネストする Collection、最大 100 階層
- Document ID:自動生成 or 指定。連番は hot spot の原因
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 事故ケース集
| 状況 | 「テスト用」として allow read, write: if true; でリリース。モバイルアプリ越しに第三者が全 Collection をダンプ。 |
|---|---|
| 原因 | Security Rules 未設定。Firebase はデフォルトでクライアント直結なので、ルールがアクセス制御の全て。 |
| 影響 | 個人情報 100 万件流出。 |
| 復旧 | Security Rules 緊急修正、影響ユーザーへの通知。 |
| 再発防止 | Firebase Emulator で Rules テスト自動化(CI に組込)。「本番デプロイ前に Rules テスト」をリリースゲートに。 |
| 状況 | チャット履歴を 1 ドキュメントに配列で全件保存。会話が長期化し 1 MB 超え、書込全失敗。 |
|---|---|
| 原因 | ① ドキュメント設計のアンチパターン(成長する配列)。② 1 MB 上限を考慮しない設計。 |
| 影響 | 該当ユーザーのチャット書込不可。 |
| 復旧 | Subcollection 構造に再設計、Dataflow で移行。 |
| 再発防止 | 「成長する配列はドキュメントに持たない」原則。メッセージは Subcollection 化。ドキュメントサイズを Cloud Monitoring で監視。 |
| 状況 | 「全体のいいね数カウンター」を 1 ドキュメントで保持。秒 1000 リクエストで RESOURCE_EXHAUSTED エラー。 |
|---|---|
| 原因 | Firestore の 1 ドキュメントへの持続的書込は 1 回 / 秒制限。 |
| 影響 | カウンター更新失敗、UX 劣化。 |
| 復旧 | Distributed Counter パターン(カウンタを N シャードに分散、読み取り時に合計)に再設計。 |
| 再発防止 | 1 ドキュメントに集中する書込パターンは Distributed Counter で水平分散。Bigtable 検討も。 |
| 状況 | 本番リリース直後、特定画面で 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 クラス長期保管 |
| DR | PITR(Point-in-Time Recovery) | 過去 7 日まで秒単位で復元(Native mode) |
| モニタリング | Read/Write Ops | Custom Quota で異常検知 |
| Storage Size | 1 ドキュメントサイズの分布監視 | |
| Rule Evaluations | Security Rules のミスマッチ数 | |
| セキュリティ | Security Rules | Emulator + CI で自動テスト |
11.9 試験での出題パターン(章11)
- 「モバイルアプリ、オフライン同期、リアルタイム」→ Firestore Native
- 「クライアントから直接アクセス、認可」→ Security Rules
- 「いいね数カウンター」→ Distributed Counter パターン
- 「過去 7 日の特定時刻に戻したい」→ PITR
- 「Datastore からの移行」→ Datastore mode 維持 or Native mode に移行
12Memorystore — Redis / Valkey / Memcached
Memorystore は 「Google マネージドのインメモリ KV」です。3 つのエンジン(Redis、Valkey(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 Valkey | Redis 互換、ライセンス非依存 | Linux Foundation の Redis フォーク、OSS |
| Memorystore for Memcached | シンプルキャッシュ | Persistence なし、純粋なキャッシュ |
12.2 Tier 比較 — Standard vs Cluster
| 項目 | Standard (Basic/HA) | Cluster |
|---|---|---|
| シャーディング | ×(単一ノード) | ○(最大 250 シャード) |
| HA / Read Replica | HA tier で 1 standby | 各シャードに 0-5 replica |
| 最大メモリ | 300 GB | 数 TB(シャード × サイズ) |
| Persistence | AOF / RDB(任意) | RDB スナップショット |
| 用途 | 中小規模キャッシュ、セッション | 大規模、スケールアウト必要 |
12.3 Persistence — AOF vs RDB
- AOF(Append-Only File):全書込操作をログ化、再起動時にリプレイ。RPO ≈ 1 秒(fsync everysec の場合)。AOF rewrite 中にメモリ使用量が一時的に増える点に注意
- RDB(Snapshot):定期的に完全スナップショット。RPO は数十分〜数時間。CPU/Disk 負荷が一時的にかかる
- Persistence 無効:純粋キャッシュ用途。再起動で全消滅
12.4 Memorystore 事故ケース集
| 状況 | セッション情報を全て 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 前に配置。 |
| 状況 | 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 で読込分散。 |
| 状況 | メモリ 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 にエクスポート |
| AOF | RPO 重視(< 1 秒)の場合 everysec | |
| HA | Standard HA / Cluster | 本番は最低 HA Standard、大規模は Cluster + Replica |
| モニタリング | Memory Utilization | > 80% で警告(OOM 回避) |
| CPU Utilization | > 70% で警告 | |
| Cache Hit Ratio | < 80% でチューニング検討 | |
| Evicted Keys | 増加傾向ならメモリ拡張 |
12.6 試験での出題パターン(章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 のキー特徴
- 容量 / IOPS / Throughput を独立にプロビジョン(PD は容量に IOPS が連動)
- 動的に IOPS / Throughput を変更可能(停止不要、ライブ調整)
- 第 3 世代以降のマシン(C3, N4, X4, M3, Z3 等)でのみ利用可
- 同じスペックなら PD より高性能 + 低コスト になることが多い
13.3 Regional PD と Async Replication
Regional PD は 2 ゾーン間で同期レプリケーションされる PD。ゾーン障害時のフェイルオーバーが容易ですが、レイテンシ・コスト面で Zonal PD の約 2 倍。Hyperdisk はAsync Replication(非同期、別リージョンへ)を別途サポートします(DR 用)。
13.4 Snapshot のベストプラクティス
- Snapshot Schedule で日次/週次/月次の自動化
- 初回はフル、以降は差分のみ課金
- 別リージョン保管が可能(DR 用)
- Application-consistent Snapshot は OS との連携(pre/post script)が必要
- VM 削除前に Snapshot を必ず取得(PD は VM と独立だが、削除フラグで道連れになる設定がある)
13.5 PD/Hyperdisk 事故ケース集
| 状況 | 本番 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。 |
| 状況 | コスト削減のため pd-standard(HDD)で MySQL 本番。IOPS 上限 3,000 でクエリレイテンシ悪化、サービス UX 劣化。 |
|---|---|
| 原因 | ① タイプ選定ミス。② IOPS / Throughput のサイジング不足。 |
| 影響 | 常時遅い、検索 UX 悪化。 |
| 復旧 | pd-ssd or Hyperdisk Balanced へオンライン移行(タイプ変更可)。 |
| 再発防止 | 本番 DB は Hyperdisk Balanced or pd-ssd。Cloud SQL なら自動で適切なディスクが選ばれる。 |
| 状況 | Regional PD でゾーン障害発生、フェイルオーバー直後にトランザクション不整合検出。書込のうち最後の数秒分が失われた。 |
|---|---|
| 原因 | Regional PD は同期だが、レプリカが 「準同期」気味で書込確認後にもごく短時間の遅延がありうる。アプリ側の二重書込防止策が必要。 |
| 影響 | 少数トランザクションのロス。 |
| 復旧 | アプリログから再 apply。 |
| 再発防止 | 重要トランザクションは 2-phase commit ライクな仕組み or Spanner / Cloud SQL HA を検討。アプリは Idempotent に設計。 |
13.6 PD/Hyperdisk 運用・保守ベストプラクティス
| 領域 | 項目 | 推奨 |
|---|---|---|
| バックアップ | Snapshot Schedule | 日次 + 週次 + 月次、保持階層化 |
| Cross-region Snapshot | DR 用、別リージョンに自動コピー | |
| Machine Image | VM 全体(複数 PD + メタ)の Snapshot | |
| HA / DR | Regional PD / Async Rep | RPO/RTO 要件に応じて選択 |
| モニタリング | Disk IOPS | プロビジョン上限の 80% で警告 |
| Disk Throughput | 同上 | |
| Disk Latency | p99 で SLO 監視 | |
| 容量計画 | Auto Resize | Cloud SQL では自動、自前 VM は要監視 |
13.7 試験での出題パターン(章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 HDD | 1〜63.9 TB | 低 | アーカイブ、開発 | 99.9% |
| Basic SSD | 2.5〜63.9 TB | 中 | 汎用 | 99.9% |
| Zonal | 1〜100 TB | 高 | 本番、低遅延 | 99.9%(zonal) |
| Regional | 1〜100 TB | 高 | 本番 HA | 99.99% |
| Enterprise | 1〜10 TB | 高 | 高 SLA、Regional | 99.99% |
| High Scale | 10〜100 TB | 非常に高 | HPC, レンダリング | 99.9% |
14.2 NFS バージョン
全 Tier で NFS v3 サポート。Enterprise tier のみ NFS v4.1 もサポート(ファイルロックなど一部用途で必要)。
14.3 Filestore 事故ケース集
| 状況 | Basic SSD で本番 NFS 運用。ゾーン障害発生、Filestore 完全停止 4 時間。 |
|---|---|
| 原因 | ① Basic / Zonal は単一ゾーン。② Regional / Enterprise に移行未実施。 |
| 影響 | NFS マウントしていた全 VM が IO エラー。 |
| 復旧 | Google 復旧待ち。 |
| 再発防止 | 本番は Regional or Enterprise Tier(99.99% SLA)。Backup を別リージョンにも。 |
| 状況 | 運用者が誤って rm -rf で重要ディレクトリ削除。Filestore Backup なし、復旧不能。 |
|---|---|
| 原因 | ① Backup Schedule 未設定。② Snapshot Schedule 未設定。 |
| 影響 | 本番データ消失。 |
| 復旧 | — |
| 再発防止 | Filestore Backup(日次 Schedule)+ Filestore Snapshot(時間内 PITR 用)。重要マウントは Read-only Bind。 |
14.4 Filestore 運用・保守
- Backup Schedule:日次自動バックアップ、別リージョン保管可
- Snapshot:Enterprise / Regional / Zonal tier で利用可、PITR 用(同一インスタンス内)
- モニタリング:
filestore.googleapis.com/nfs/server/used_bytes_percentで容量、operations_countでスループット
14.5 試験での出題パターン(章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 / Oracle | Cloud SQL / AlloyDB / Spanner | Continuous(CDC)+ Snapshot | DB 移行 |
| Datastream | Oracle / MySQL / PG | BigQuery / GCS / PubSub | サーバーレス CDC | 分析パイプライン |
| Storage Transfer Service (STS) | S3 / Azure Blob / オンプレ NFS / GCS | GCS | スケジュール転送 | オブジェクト一括 |
| Transfer Appliance | オンプレ(巨大) | GCS | 物理ディスク輸送 | 60 TB 超、低帯域 |
| BigQuery Data Transfer Service | Google Ads / YouTube / SaaS | BigQuery | 定期取り込み | BI / 広告 |
| BigQuery Migration Service | Teradata / Redshift / Snowflake / Oracle | BigQuery | SQL 変換 + データ転送 | DWH 移行 |
| Dataflow / Dataproc | 任意 | 任意 | カスタム ETL | 変換含む移行 |
15.2 オブジェクト移行の決定ロジック
STS Online / gsutil
STS Online(並列 + Resumable)
Transfer Appliance
15.3 DB 移行の決定ロジック
- MySQL → Cloud SQL:DMS(同種、ダウンタイム最小)
- Oracle → PostgreSQL/AlloyDB:DMS(異種、スキーマ変換あり)
- Oracle/PG → BigQuery(分析):Datastream(CDC、サーバーレス)
- Teradata/Redshift/Snowflake → BigQuery:BigQuery Migration Service
- カスタム変換が必要:Dataflow(streaming or batch)
16運用・保守 全体ベストプラクティス
本章はストレージ&DB 全サービス横断の運用視点をまとめた章です。本番設計レビューのチェックリストとして使えます。
16.1 バックアップ戦略マトリクス(全サービス横断)
| サービス | デフォルト | 推奨設定 | 保持期間 | PITR |
|---|---|---|---|---|
| GCS | なし | Versioning + Soft Delete + Cross-region コピー | 30 日〜無期限 | — |
| Cloud SQL | 自動バックアップ 7 日 | 自動バックアップ + PITR + Export | 7〜365 日 | ○(最大 7 日) |
| AlloyDB | Continuous Backup 14 日 | 同上 + Secondary Cluster | 14〜35 日 | ○(最大 35 日) |
| Spanner | なし | Backup(日次)+ Export to GCS | 最大 1 年 | —(Backup でカバー) |
| BigQuery | Time Travel 7 日 | Snapshot + Cross-region Replica + Export | 2〜7 日 + 無期限 | ○(7 日) |
| Bigtable | なし | Backup(日次)+ Export to GCS | 最大 30 日 | — |
| Firestore | なし | Scheduled Export + PITR | 7 日 + GCS 無期限 | ○(7 日, Native mode) |
| Memorystore | なし | AOF / RDB Snapshot | 日次〜週次 | — |
| PD / Hyperdisk | なし | Snapshot Schedule(日次 + 週次 + 月次) | 無期限 | — |
| Filestore | なし | Backup Schedule + Snapshot | 日次〜 | —(Snapshot で近似) |
16.2 災害復旧(DR)シナリオ別 RTO/RPO
| サービス | DR 構成 | RTO | RPO | 追加コスト |
|---|---|---|---|---|
| GCS | Multi-region バケット | 0 秒(透過) | 0 | + ストレージ |
| GCS | Cross-region Storage Transfer | 分単位 | 転送間隔 | + Egress |
| Cloud SQL | HA(同 region) | ~60 秒 | 0 | + 100%(standby) |
| Cloud SQL | Cross-region Read Replica | 分単位(手動 promote) | レプリカ遅延(数秒) | + 100%/region |
| AlloyDB | Secondary Cluster | 分単位(promote) | 数秒 | + Secondary 分 |
| Spanner | Multi-region 構成 | 0 秒(透過) | 0 | + 5〜10 倍 |
| BigQuery | Cross-region Dataset Replica | 分単位 | 非同期遅延 | + ストレージ |
| Bigtable | Multi-cluster Routing | 数秒(自動) | 数秒 | + クラスタ数倍 |
| Firestore | Multi-region location | 0 秒(透過) | 0 | + ストレージ |
| PD | Regional PD | 分単位 | 0(同期) | + 100% |
| PD | Async Replication | 分単位 | 分単位 | + 別 region 分 |
16.3 モニタリング指標まとめ
| サービス | 必須メトリクス | 閾値の目安 |
|---|---|---|
| Cloud SQL | CPU / Memory / Disk / Replication Lag / Active Connections / Transaction Logs | CPU 80% / Mem 85% / Disk 80% / Lag 60s / Conn 80% |
| AlloyDB | CPU / Lag / Connection / Disk IOPS | CPU 75% / Lag 10s |
| Spanner | CPU / Lock Wait Time / Throughput / Latency / Storage | CPU 65% / Lock Wait 100 ms / Storage 4 TB/node |
| BigQuery | Slot Utilization / Bytes Processed / Job Concurrency / Failed Jobs | Slot 80% / Failed 5% |
| Bigtable | CPU per node / Hottest Node / Read/Write Latency / Storage | CPU 70% / Hot Spot 検出 |
| Firestore | Read/Write Ops / Document Size / Rule Evaluations | Custom Quota 設定 |
| Memorystore | Memory / CPU / Hit Ratio / Evicted Keys | Mem 80% / CPU 70% / Hit < 80% |
| PD/Hyperdisk | IOPS / Throughput / Latency | プロビジョン 80% |
| GCS | Request Count / Bandwidth / Error Rate | Error 1% |
| Filestore | Used Bytes % / Ops Count | 容量 80% |
16.4 キャパシティ計画の原則
- Cloud SQL / AlloyDB:Disk Auto-resize で容量、CPU は事前にスケールアップ計画。Replication Lag のトレンドで Read Replica 追加判断
- Spanner:CPU 65% を維持するように Autoscaling、ノード当り 4 TB Storage 上限
- BigQuery:Reservation の Baseline + Max を月次見直し、Slot 不足はオンデマンドにフォールバック設定
- Bigtable:CPU 目標 70%、Storage は SSD 2.5 TB / HDD 8 TB per node
- Memorystore:メモリ 80% で警告、AOF rewrite buffer のため 50% 空けるのが理想
- PD/Hyperdisk:Hyperdisk は IOPS/Throughput をライブで動的変更可能(Hyperdisk なら計画ミスもリカバリ容易)
16.5 パッチ管理
- Cloud SQL:Maintenance Window(曜日 + 時間)を業務時間外に設定。Deny Maintenance Period で最大 90 日延期可(セール期間など保護)。メジャー版アップグレードは事前テスト必須
- AlloyDB:Maintenance Window 設定、Primary とは別タイミングで Secondary をアップグレード
- Spanner / BigQuery / Bigtable / Firestore:完全マネージド、パッチは透過的(影響を意識する必要なし)
- GCE(PD アタッチ VM):OS Config Patch Management で自動パッチ。Maintenance Policy で live migration / restart 制御
- Memorystore:Maintenance Window 設定、Persistence 有効化で再起動耐性確保
16.6 コスト監視
- Budget Alert:Project / Folder / Label 単位、閾値超過で Pub/Sub → Slack 通知
- Quotas:Project の API Quota(特に BigQuery)を絞る
- BigQuery Custom Quotas:ユーザー / プロジェクトの QueryUsagePerDay を制限
- Recommender:Idle PD、未使用 IP、過剰 Cloud SQL を自動検出
- Pricing Calculator:設計時に必ず月額試算
17試験頻出パターン — ケーススタディ別の推奨構成
PCA 試験では「ケース」が与えられ、最適なストレージ構成を 1 つ選ぶ問題が頻出です。以下にパターン別の正解構成を整理します。
17.1 ケーススタディ別 推奨構成
| シナリオ | 推奨構成 | 判断軸 |
|---|---|---|
| グローバル EC、ACID 必須、複数大陸ユーザー | Spanner Multi-region + Memorystore + GCS | グローバル ACID = Spanner 一択 |
| モバイルアプリ、オフライン同期、低遅延通知 | Firestore Native + GCS + Cloud Functions | SDK 直結 + リアルタイム = Firestore |
| IoT 100 万デバイス、秒 100 万書込、時系列 | Bigtable + Pub/Sub + Dataflow → BigQuery | 大規模書込 KV = Bigtable |
| 分析・BI、ペタバイト級、SQL | BigQuery + BI Engine + Looker | DWH = BigQuery |
| レガシー Oracle 移行、リフト&シフト | Bare Metal Solution or Cloud SQL(PG/MySQL)+ DMS | Oracle 互換要件次第 |
| 動画ストリーミング、グローバル CDN | Multi-region GCS + Cloud CDN + Global LB | 静的アセット = GCS Multi-region |
| SaaS バックエンド、中規模 OLTP | Cloud SQL HA + Memorystore | 標準 OLTP = Cloud SQL |
| PG 高負荷 OLTP + 分析(HTAP) | AlloyDB(Columnar Engine) | HTAP = AlloyDB |
| HPC レンダリング、巨大共有ファイル | Filestore High Scale or GCS Fuse | NFS POSIX = Filestore |
| 監査ログ、改竄不可、7 年保持 | GCS + Bucket Lock + Retention 7y + Cloud Logging Sink | WORM = 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 |
| 最大 vCPU | 128 (Enterprise Plus) |
| Read Replica 上限 | 10(MySQL/PG) |
| HA SLA | 99.95% |
| Automated Backup 保持 | 1〜365 日 |
| PITR 保持 | 1〜7 日 |
19.3 AlloyDB
| 項目 | 制限 |
|---|---|
| Primary 最大 vCPU | 128 |
| Read Pool 最大ノード | 20 |
| Continuous Backup 保持 | 14〜35 日 |
| SLA | 99.99%(Regional) |
19.4 Spanner
| 項目 | 制限 |
|---|---|
| 最小 Processing Unit | 100 PU |
| ノード当りストレージ | 4 TB |
| Interleaved Table 階層 | 最大 7(推奨 2-3) |
| Multi-region SLA | 99.999% |
| Regional SLA | 99.99% |
| Backup 保持 | 最大 1 年 |
| Read-Write Transaction | 最大 10 分 |
19.5 BigQuery
| 項目 | 制限 |
|---|---|
| クエリタイムアウト | 6 時間 |
| 1 テーブル最大 Partition 数 | 10,000 |
| Streaming Insert 行サイズ | 10 MB |
| Time Travel | 2〜7 日 |
| 同時クエリ(On-demand) | 100 / プロジェクト |
| Reservation 最小 slots | 50(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/Node | 5 TB(target 2.5 TB) |
| HDD Storage/Node | 16 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/shard | 5 |
| SLA | 99.9%(Basic)/ 99.99%(HA, Cluster) |
19.9 PD / Hyperdisk
| 項目 | 制限 |
|---|---|
| PD 最大サイズ | 64 TB |
| Hyperdisk Balanced IOPS | 2,500 〜 160,000 (調整可) |
| Hyperdisk Extreme IOPS | 最大 350,000 |
| Snapshot 保持 | 無期限 |
| Local SSD | VM ごとに 9 TB まで |
19.10 Filestore
| 項目 | 制限 |
|---|---|
| Basic 容量 | 1〜63.9 TB |
| Enterprise 容量 | 1〜10 TB |
| High Scale 容量 | 10〜100 TB |
| Enterprise SLA | 99.99% |
次のステップ
Compute
GCE / GKE / Cloud Run を深掘り
Networking
VPC / Load Balancer / PSC を深掘り
Security
IAM / KMS / VPC Service Controls を深掘り
問題演習
ストレージ&DB の試験問題に挑戦
用語集
主要用語の早見表
ロードマップ
PCA 全体の学習計画
- Cloud Storage overview
- GCS Storage classes
- GCS Lifecycle
- GCS Autoclass
- GCS Bucket Lock
- Cloud SQL overview
- Cloud SQL HA
- AlloyDB overview
- Cloud Spanner
- Spanner Multi-region
- Spanner Schema Design
- BigQuery overview
- BigQuery Reservations
- BigQuery Partitioning
- BigQuery cost best practices
- Bigtable overview
- Bigtable schema design
- Firestore
- Memorystore
- Persistent Disk
- Hyperdisk
- Filestore