Datastore の概要

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

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

リレーショナル データベースとの比較

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

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

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

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

最適な用途

Datastore は、大規模な構造化データに対して可用性の高いアクセスを必要とするアプリケーションに最適です。Datastore は、次のようなタイプのすべてのデータを保存、クエリする目的で使用できます。

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

ストレージとデータベースに関するその他のオプション

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

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

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

他のデータベース オプションについて詳しくは、データベース サービスの概要をご覧ください。

次のステップ

App Engine と Datastore の接続

App Engine の Go スタンダード ランタイムは、Go Datastore API を使用して Datastore に接続します。datastore パッケージの内容の詳細については、datastore パッケージ リファレンスをご覧ください。

App Engine スタンダード環境では、Go アプリケーションで Cloud Datastore クライアント ライブラリを使用できません。