GCPのストレージサービスは、前回取り上げた、仮想マシンの永続ディスクに加え、「Google Cloud Storage(以下、Cloud Storage)」がある。データベース(DB)のサービスとしては、「Google Cloud Bigtable(以下、Cloud Bigtable)」「Google Cloud Datastore(以下、Cloud Datastore)」「Google Cloud SQL(以下、Cloud SQL)」「Google Cloud Spanner(以下、Cloud Spanner)」の4種がある(表1)。
最初に、仮想マシンの永続ディスクを除いて、これらのサービスを簡単に説明する。
Cloud Storageは、Amazon S3相当のオブジェクトストレージである。S3との違いは、独自のCDN(Content Delivery Network)機能(AWSのCloudFront相当)を備えていることだ。
データベースのサービス、Cloud BigtableとCloud DatastoreはどちらもNoSQLデータベースに分類される。性能重視のCloud Bigtable、使いやすい機能を備えたCloud Datastoreと考えればよい。
Cloud BigtableはGoogle検索サービスなどで使われているDBで、高い応答性能やスケーラビリティーを求めるシステムに適している。半面、一般的なWebアプリケーションで利用するにはハードルが高い面がある。
そこで、Cloud Bigtableをベースに、SQLライクな問い合わせや、ACID(原子性、一貫性、独立性、耐久性)が保証されるトランザクション処理などの機能を備えたのがCloud Datastoreである。JavaやPythonのオブジェクトを永続化する機能を備えたドキュメント指向DBと位置付けられる。
Cloud SQLとCloud Spannerはどちらもリレーショナルデータベース(RDB)に分類される。MySQLやPostgreSQLをサービス化したものがCloud SQLで、大規模向けにグローバルな水平スケーリング機能などを備えたのがCloud Spannerである。
ストレージ/DBサービスの使い分け
これらのストレージ/DBサービスをどのように使い分けたらよいのか。
ストレージ/DBサービスの使い分けについては、データウエアハウスのサービスBigQuery(BigQueryについては別の回で取り上げる)も対象に加えて、GCPの公式サイトにフローチャートが掲載されている。これをベースに、筆者らの経験に基づく使い分け指針を解説する(図1)。
選択の観点は「構造化データ」「データ解析」「低レイテンシー」「リレーショナルデータベース」「高拡張性」の五つである。
構造化データ
格納するデータが画像データやテキストファイルなど、構造化されていない場合はCloud Storageが唯一の選択肢となる。Cloud Storageは99.999999999%(イレブンナイン)の耐久性(1年間にわたって保持される確率)を実現するように設計された容量無制限のストレージサービスで、使い勝手が良い。
システム内・システム間でのデータの受け渡しや、アプリケーションの配布など、データの保存以外でも多く利用される。
データ解析
大きなサイズのデータを保管し、データ解析用途で利用する場合には、Cloud BigtableとBigQueryが候補となる。両サービスともPB(ペタバイト)クラスまで拡張でき、高い検索性能を持っている。
低レイテンシー
Cloud BigtableとBigQueryの最大の違いはレイテンシーにある。Cloud Bigtableは同一リージョン内にあるCompute Engineインスタンスからのリクエストであれば、10ミリ秒以内に応答できる。単純なクエリーしか処理できないが、高い応答性能が求められるリアルタイム解析用途ではCloud Bigtableが候補となる。
ミリ秒単位での応答を必要としない準リアルタイム解析、またはバッチ処理によるデータ解析用途ではBigQueryの採用を推奨する。Cloud Bigtableと異なり、比較的複雑なクエリーを処理できるので使い勝手が良い。
リレーショナルデータベース(RDB)
Cloud DatastoreはSQLライクな問い合わせとACIDトランザクション処理をサポートしているが、構造はRDBとは異なり、複数テーブルの結合など複雑なクエリーには対応しない。データストアーとしてRDBが必要となる場合は、Cloud SQLとCloud Spannerが候補となる。
Cloud Datastoreは、サービス規模が拡大しても自動的にスケールし、処理速度が変化しない。Cloud SQLやCloud Spannerと比較して廉価なので、必ずしもRDBを必要としないケースでは、Cloud Datastoreの検討を推奨する。
高拡張性
Cloud SQLには処理負荷に応じてインスタンス数を変更する機能(水平スケーリング)がない。そのため、Read性能が不足した際はリードレプリカによるスケールアウト、Write性能が不足した際はリソースを拡張するスケールアップが必要となる。
一方、Cloud Spannerは大規模かつグローバルに水平スケーリングするので、高い拡張性が求められるケースで候補となる。ただしCloud SQLと比べ利用する際の制約事項があり、既存RDBの置き換え用途としてはクセのあるサービスであり、注意したい。
以降ではCloud Storage、Cloud Bigtable、Cloud Datastore、Cloud SQLに関して、特徴と利用上の注意点を解説する。