Cloud Datastore の概要

Google Cloud Datastore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQL ドキュメント データベースです。Cloud Datastore の特長は次のとおりです。

  • アトミック トランザクション: Cloud Datastore は、結果が「すべて成功」と「何も起こらない」のどちらかになる一連のオペレーションを実行できます。
  • 可用性の高い読み取り / 書き込み処理: Cloud Datastore は、障害発生点からの影響を最小限に抑える冗長性を備えた Google データセンターで実行されています。
  • 優れたスケーラビリティと高いパフォーマンス: Cloud Datastore は分散アーキテクチャを使用して自動的にスケーリングを管理します。インデックスとクエリの制約を組み合わせることで、データセットのサイズではなく結果セットのサイズに応じてクエリをスケールします。
  • 柔軟なストレージとデータのクエリ: Cloud Datastore はオブジェクト指向の言語やスクリプト言語に自然に対応させることが可能で、複数のクライアントを通じてアプリケーションに公開されています。また SQL ライクなクエリ言語も提供しています。
  • 強整合性と結果整合性のバランス: Cloud Datastore ではキーによるエンティティの検索が可能なため、祖先クエリでは常に強整合性が保たれたデータを受け取ります。また、その他のすべてのクエリでは結果整合性が保たれます。このような整合性モデルにより、大量のデータとユーザーを処理しながら優れたユーザー エクスペリエンスを提供するアプリケーションを実現できます。
  • 保存時の暗号化: Cloud Datastore はディスクに書き込む前に自動的にすべてのデータを暗号化し、承認されたユーザーがデータを読み取るときに自動的に復号します。詳細については、サーバー側の暗号化をご覧ください。
  • 予定されたダウンタイムが発生しないフルマネージド: Cloud Datastore サービスの管理は Google が処理するため、デベロッパーはアプリケーションに集中できます。サービスが予定されたアップグレードを受けるときにも、アプリケーションは引き続き Cloud Datastore を使用できます。

従来のデータベースとの比較

Cloud Datastore のインターフェースは従来のデータベースと同じ機能を多数備えていますが、NoSQL データベースとして、データ オブジェクト間の関係を表現する方法が異なります。ここでは Cloud Datastore とリレーショナル データベースの概念をおおまかに比較します。

概念 Cloud Datastore リレーショナル データベース
オブジェクトのカテゴリ 種類 テーブル
オブジェクト単体 エンティティ
オブジェクトの個々のデータ プロパティ フィールド
オブジェクトの一意の ID キー 主キー

リレーショナル データベースのテーブルにおける行とは異なり、Cloud Datastore では同じ種類のエンティティが異なるプロパティを持つ場合があります。また別々のエンティティが同じ名前のプロパティを持ちながら、値の型は異なる場合があります。このような独自の特徴から、自動的にスケールする能力を活用するためにデータを設計、管理する方法が異なります。特に、Cloud Datastore は次の重要な動作方法が従来のリレーショナル データベースとは異なります。

  • Cloud Datastore は非常に大規模なデータセットに対して自動的にスケールできるように設計されているため、アプリケーションが大量のトラフィックを受信しても高いパフォーマンスを維持できます。
  • Cloud Datastore の書き込み処理は、必要に応じて自動的にデータを分散することでスケールされます。
  • Cloud Datastore では、データセットのサイズではなく結果セットのサイズに応じてパフォーマンスがスケールするクエリだけがサポートされているため、読み取り処理がスケールされます。つまり、結果セットに 100 件のエンティティが含まれるクエリは、100 件を超えるエンティティを検索した場合でも同じパフォーマンスを発揮します。これは 100 万件になっても同じです。この特徴が、一部のタイプのクエリがサポートされていない主な理由となっています。
  • すべてのクエリは構築済みのインデックスによって提供されるため、実行できるクエリのタイプは、SQL を使用するリレーショナル データベースで許可されているものよりも制限が厳しくなります。特に Cloud Datastore では、結合オペレーションや複数のプロパティに対する不等式フィルタリング、サブクエリの結果に基づいたデータに対するフィルタリングがサポートされていません。
  • 従来のリレーショナル データベースではスキーマが強制されますが、Cloud Datastore では同じ種類のエンティティであってもプロパティ セットの一貫性は求められません(独自のアプリケーション コードでこのような要件を強制することもできます)。

最適な用途

Cloud Datastore は、スケーラブルで大規模な構造化データに依存するアプリケーションに適しています。Cloud Datastore は、次のようなタイプのすべてのデータを保存、クエリする目的で使用できます。

  • 小売店向けにリアルタイムな在庫と商品の詳細を提供する商品カタログ
  • ユーザーの過去の行動と好みに応じてカスタマイズされたエクスペリエンスを提供するユーザー プロフィール
  • ある銀行口座から別の口座への送金など、ACID 特性に基づくトランザクション

その他のストレージ オプション

Cloud Datastore はすべてのユースケースに適しているわけではありません。たとえば Cloud Datastore はリレーショナル データベースではないため、分析データに対する効果的なストレージ ソリューションとはいえません。

ここでは Cloud Datastore 以外のソリューションを検討すべき一般的なシナリオを示します。

  • SQL を完全にサポートするオンライン トランザクション処理(OLTP)システム向けのリレーショナル データベースが必要な場合は、Google Cloud SQL を検討してください。
  • ACID トランザクションのサポートが不要な場合、またはデータが高度に構造化されていない場合は、Google Cloud Bigtable を検討してください。
  • オンライン分析処理(OLAP)システムでのインタラクティブなクエリが必要な場合は、Google BigQuery を検討してください。
  • 大容量の画像やムービーなど、大規模な不変 blob を格納する必要がある場合は、Google Cloud Storage を検討してください。

App Engine を使った Cloud Datastore との接続

Cloud Datastore に接続するには、次の API を使用します。

  • Objectify: Google が推奨する、オープンソースの Java 用 API。ORM に似た機能を備えた高度な Datastore 用 API を提供します。
  • Java 用 Datastore API: App Engine SDK に組み込まれた低水準の Datastore API。Datastore のすべての機能を直接利用することができます。Java 向けの App Engine Datastore ドキュメントをご覧ください。

フィードバックを送信...

Java の App Engine スタンダード環境