はじめに
Google CloudのPCA(Professional Cloud Architect)認定資格取得に向けて学習した内容を自分なりに整理します。Google Cloudのサービスに限らず、それを扱う上での関連知識についても触れています。
本記事はDB編ということで、下記の要素を扱います。
- データベース
- Cloud SQL
- Cloud Spanner
- BigTable
- Firestore
- Cloud MemoryStore
この記事における「現在」や「最近」などの表現は、特に断らない限り2025年6月時点を指します
データベース
共通的な特徴
- 高カスタマイズ性とスケーラビリティ、高可用性
- セキュリティ
- モニタリング / ロギング
Cloud SQL
- 汎用的なフルマネージドのRDBMS
- リレーショナルで構造化されたデータを保持する
- パッチ適用、バックアップ、障害復旧などが自動的に行われる
- MySQL, PostgreSQL, SQL Serverを利用できる
- 標準のSQLをサポート
- バックアップ機能
- 自動バックアップ / 手動バックアップ
- 増分バックアップ
- ポイントインタイムリカバリ
- パフォーマンス
- 読み書き両方ができるプライマリインスタンス(Primary Instance)
- 読み込み専用のリードレプリカ(Read-Replica)
- クロスリージョンのリードレプリカや、外部(オンプレミスなど)のレプリカも作成可能
- 読み書きのワークロードを分離することで負荷を分散
- 高可用性(HA)構成
- リージョン内の異なるゾーンに、フェイルオーバーレプリカを作成することで高可用性(HA)構成を実現できる
- Cloud SQLはリージョナルサービスのため、リージョンをまたいでフェイルオーバーレプリカを作成することはできない
- 複数リージョンにわたる設計はディザスタリカバリ構成として行う必要がある
シャーディング
- データベースの負荷分散の手法
- データベース全体を複数の「シャード」(=データのサブセット)に分割し、複数のサーバに分散配置することで水平方向にスケールする(スケールアウトする)手法
- レプリケーションの負荷を軽減し、レイテンシの低減に寄与する
- Cloud SQLはあくまで既存RDBMSのマネージド版であり、RDBMS自体にはシャーディング機能がないので、自動的にはシャーディングされない。ユーザーが手動で設計・管理する必要がある
- Cloud SpannerなどのクラウドネイティブなDBは自動でシャーディングが行われる
Cloud Spanner
- グローバルスケールのRDB
- リレーショナルで構造化されたデータを保持
- 地理的に分散されたデータセンター間でデータを自動的にレプリケート
- 大量のデータを処理し、高いトランザクションを実現
- 水平スケーリングと強力なトランザクション整合性を両立
- 通常、動的スケーリングが保証される場合はトランザクション整合性を保つのは難しいが、Cloud Spannerは強力なトランザクション整合性を持つ
- 標準のSQLをサポート
- OLTP(Online Transaction Processing)など高いトランザクションレートを持つシステムに適している
- 3つの構成オプションが選択できる
- リージョン構成 / デュアルリージョン構成 / マルチリージョン構成
- リージョン構成でも同一リージョンの複数ゾーンにデータが分散配置され高い可用性を提供するが、マルチリージョナル構成では地理的に分散した複数のリージョンにデータがレプリケートされ、より高い可用性を提供する
BigTable
- 大規模な分散をサポートする、マネージドなNoSQLデータベース
- リアルタイムのアプリケーションや大量のデータを処理するバッチジョブ、分析ワークロードに適する
- 数TBから数PBまでスケーリングする
- スキーマ設計
- 単一の主キーと任意の数の列。列は列ファミリにグループ化される
- Hadoopエコシステムとの互換
- HBase API規格のサポート
Firestore
フルマネージドなNoSQLドキュメントデータベース
2つのモードが提供されている
Firestoreネイティブモード
FirebaseにもGoogle Cloudにも統合されているドキュメント指向NoSQLデータベース
現在はこちらが推奨されている
- ドキュメント / コレクション モデルに基づいており、柔軟な入れ子構造が可能
- ドキュメントはコレクションとしてグループ化される
- ドキュメントはフィールドを持ち、サブコレクションを持つ
- コレクションとドキュメントを効率的に検索、フィルタリングできる
- 高スケーラビリティ、高可用性、ACIDトランザクション対応
- 複数のドキュメントやコレクションにまたがるトランザクションも可能
- リアルタイムの同期が可能で、クライアント側のSDK(Firebase SDK)を使えば、データの変更を即時にアプリへ反映できる
- オフライン対応もサポートされており、オフライン時の変更はオンライン復帰時に自動で同期される
- モバイルアプリやWebアプリにおけるリアルタイム性が求められるユースケースに最適
Firestore Datastoreモード(旧 Cloud Datastore)
Datastoreモードは、従来のCloud Datastoreとの互換性を維持するために提供されているレガシー互換モード
- データ構造はエンティティ / Kind / プロパティモデルに基づく
- RDBで言うテーブルやレコードに近い
- スケーラブルでトランザクションにも対応するが、トランザクションは単一のエンティティグループ内に制限される
- リアルタイム同期やオフライン対応はサポートされていない
- クライアント側の更新検知にはポーリングなど自前の実装が必要
- App Engineとの親和性が高く、旧来のアプリケーションにおけるデータストアとして引き続き利用可能
Cloud MemoryStore
- フルマネージドなインメモリデータストアサービス
- RedisとMemcachedをサポート
- キャッシュ、セッション管理、リアルタイムアプリケーションのデータストアとして利用
- 高いパフォーマンスと低レイテンシを実現
- Redisクラスタ構成による高可用性とスケーラビリティもサポート