1. Firestore の 3 モード
| モード | データモデル | API | リアルタイム | オフライン | 推奨 |
| Native |
Document / Collection |
Firestore v1 |
対応 |
対応 |
新規アプリ |
| Datastore |
Entity / Kind |
Datastore v1 |
非対応 |
非対応 |
レガシー互換のみ |
| MongoDB-compatible |
BSON Document |
MongoDB Wire Protocol |
対応 |
クライアント次第 |
MongoDB アプリ移行 |
Google 公式の推奨は 「新規アプリは Native モード」。Datastore モードは旧 App Engine 用の互換層で、新規開発では選ぶ理由はほぼない。
モードはプロジェクト/データベース作成時に決定し、後から変更不可。
2. Native モード — Real-time + Offline
Firestore Native の最大の強み:
- Real-time listeners: クライアントがドキュメントを subscribe すると、変更があった瞬間にサーバーから push される
- オフライン永続化: モバイル/Web SDK は自動でローカルキャッシュ。ネット断中も書き込み可、復帰後に同期
- Security Rules: バックエンド不要で「このユーザーはこのドキュメントを読めるか」を宣言的に定義
データモデル
Collection (users)
├── Document (user_id: alice)
│ ├── name: "Alice"
│ ├── age: 30
│ └── Subcollection (orders)
│ ├── Document (order_id: 1) {...}
│ └── Document (order_id: 2) {...}
└── Document (user_id: bob) {...}
※ SubCollection で階層化、最大 100 階層
整合性
Firestore Native は強整合性(Strong consistency)を提供する。トランザクション内で複数ドキュメントの読み書きを atomic に実行可能。
「500/50/5 ルール」:
新規 Collection への持続的な書き込みレートは「500 ops/sec」が初期上限。これを 5 分毎に 50% ずつ増加して目標値へ到達する設計が推奨。一気に高 QPS で書き込むと制限される。
3. MongoDB-compatible モード
2024年に GA された比較的新しいモード。MongoDB Wire Protocol で接続できるため、既存 MongoDB アプリのコード変更ゼロで移行可能。
対応するクライアント:
- MongoDB 公式 Driver(Node, Python, Java, Go, etc.)
- MongoDB Shell (mongosh)
- Compass(GUI)
対応していない機能の例:
- MongoDB 固有の管理コマンド(一部)
- Change Streams(一部条件付き)
4. Firestore の制限値と落とし穴
ドキュメント最大サイズ
1 MiB
超えるなら GCS + URL
Collection 持続書込
500/s
初期上限
Multi-region SLA
99.999%
nam5, eur3, asia1
Firestore の課金は「読み書きオペレーション数」。listener も「クエリ + 受信ドキュメント数」でカウントされるため、頻繁にリスナーを張りなおすコードは課金爆発のリスク。
Native vs Datastore の細かい違い
| 項目 | Native | Datastore |
| API | Firestore v1 | Datastore v1 |
| クライアント言語 | 多数(モバイル含む) | サーバー中心 |
| セキュリティ | IAM + Security Rules | IAM のみ |
| Ancestor クエリ制限 | なし | 従来あり(解消済み) |
| 1 グループ書込制限 | なし | 従来 1/sec(解消済み) |
| Real-time | あり | なし |
5. Memorystore 全エンジン概観
| エンジン | 特徴 | HA | 主用途 |
| Memorystore for Redis |
多機能、データ構造、Pub/Sub、Lua |
Standard Tier で HA |
キャッシュ + リーダーボード + Pub/Sub軽量 |
| Memorystore for Memcached |
シンプル KV、永続化なし |
クラスタ構成のみ |
純粋キャッシュ、最大スループット |
| Memorystore for Valkey |
Redis フォーク(OSS)、Redis 互換 |
クラスタ標準 |
新規 OSS 戦略、Redis 7+ 互換 |
| Memorystore for Redis Cluster |
Redis Cluster プロトコル |
標準で HA + シャード |
>300GB 大規模 Redis |
6. Redis の Tier と制約
| 項目 | Basic Tier | Standard Tier | Cluster |
| Replication | なし | あり (cross-zone) | あり (シャード内) |
| 自動フェイルオーバー | なし | あり | あり |
| SLA | なし | 99.9% | 99.9% |
| Read Replica | - | 最大 5 | シャード毎 |
| 最大容量 | 300 GB | 300 GB | 14.4 TiB |
| 用途 | キャッシュのみ・再起動でデータ消失 OK | 本番標準 | 大規模本番 |
永続化: Memorystore は RDB スナップショットのみ対応。AOF (Append-Only File) 非対応。
→ OSS Redis に慣れていると AOF を期待しがちだが、Memorystore は RDB エクスポートのみ。
Basic Tier はデータ消失リスク。再起動・スケール変更でメモリ上のデータは全消失する。「キャッシュとして再構築可能」な用途以外では使うべきではない。
ブロックされている Redis コマンド
マネージドサービスの安定性のため、いくつかの Redis コマンドはブロックされている。
ブロック例:
- CONFIG SET (一部のみ許可)
- CLUSTER FAILOVER
- DEBUG
- REPLICAOF / SLAVEOF
- SHUTDOWN
- MIGRATE
- SAVE / BGSAVE (export 機能経由のみ)
→ OSS Redis 用ツールが動かない可能性あり、要事前検証
7. Memcached / Valkey
Memorystore for Memcached
- 純粋なキャッシュ用途
- クラスタ構成(最大 20 ノード、合計 5 TB)
- Multi-threaded(CPU 効率良い)
- データ構造なし、PUB/SUB なし
- 永続化なし
Memorystore for Valkey
Redis 7.x のフォーク。OSS コミュニティで開発が活発化しており、Google Cloud も注力。Redis 互換クライアントがそのまま使える。新規プロジェクトで ライセンス制約を避けたい場合の選択肢。
8. キャッシュデザインパターン
パターン1: Cache-Aside (Lazy Loading)
アプリ ─ ① Read ──► Memorystore Redis
│
(Hit) → 返却
(Miss)
│
② Read ──► Cloud SQL
③ Write Back ──► Redis (TTL 設定)
④ 返却
パターン2: Write-Through
アプリ ─ ① Write ──► Cloud SQL + Redis 同時更新
メリット: キャッシュが常に最新
デメリット: 書き込みレイテンシ増加
パターン3: Write-Behind (Write-Back)
アプリ ─ ① Write ──► Redis
│
(非同期) ──► Cloud SQL
メリット: 書き込み高速
デメリット: データロスリスク (Basic Tier では危険)
試験での典型シナリオ:
- 「読み取りが多く、キャッシュを差し込みたい」 → Cache-Aside
- 「セッションストア」 → Redis(永続化 + TTL)
- 「リーダーボード」 → Redis Sorted Set
- 「短命だが超高速キャッシュ」 → Memcached
9. 試験頻出のひっかけ
| 問題 | NG 回答 | 正解 |
| MongoDB アプリ + Wire Protocol 互換 |
Bigtable / Spanner |
Firestore MongoDB-compatible / MongoDB Atlas |
| モバイル + オフライン + リアルタイム |
Cloud SQL |
Firestore Native |
| リーダーボード(TOP100 ソート) |
Cloud SQL ORDER BY |
Memorystore Redis Sorted Set |
| 1 セッション 5 MB のオブジェクト保存 |
Firestore Document |
GCS + URL を Firestore に格納(1MiB 超) |
| Memorystore で AOF 永続化 |
有効化 |
対応していない(RDB のみ) |
| HA 必須のキャッシュ |
Basic Tier |
Standard Tier (or Cluster) |