データストア統計情報

Datastore モードの Firestore(Datastore)は、アプリケーションに保存されているデータに関する統計情報を維持します。たとえば、エンティティの数、種類、特定の型のプロパティ値が使用している容量などです。

これらの統計情報は、次のいずれかの方法で Google Cloud コンソールで確認できます。

  • [ダッシュボード] ページで、
  • [エンティティ] ページで、SELECT * FROM __Stat_Kind__ 形式の GQL クエリを実行します。
  • アプリケーション内でプログラミングによってアクセスすることもできます。その場合、Datastore API を使用して特別な名前のエンティティに対してクエリを実行します。Datastore API の詳細については、API とリファレンスをご覧ください。

Datastore では、データに関する統計情報を提供する特殊なエンティティを識別するために、最初と最後は 2 つのアンダースコアで終わる種類名を使用します。これらは統計情報エンティティと呼ばれます。たとえば、各アプリには __Stat_Total__ という種類のエンティティが 1 つあり、これは Datastore モード データベース内のすべてのエンティティに関する統計情報を表します。

統計エンティティは、データに関する情報を追跡し、データ使用量に関する分析情報を提供します。これらは自動的に作成されます。各統計情報エンティティには、次のプロパティがあります。

  • count: 統計情報で認識されている項目数(長整数)
  • bytes: 統計情報の項目の合計サイズ(長整数)
  • timestamp: 統計情報が最後に更新された時刻(日時値)

各エンティティは特定の種類に属します。統計情報の種類は、収集または使用される統計情報のカテゴリを示します。種類を使用して、統計情報の目的(クエリの最適化、パフォーマンスの向上、データ分析など)を特定します。

統計情報の一部の種類には、このドキュメントの統計情報のリストに記載されている追加のプロパティもあります。

統計情報システムが新しい統計情報エンティティを作成しても、以前の統計情報エンティティが直ちに削除されるわけではありません。整合性のある統計情報を取得する最善の方法として、最新の timestamp を持つ統計情報エンティティに対してクエリを実行し、他の統計情報エンティティをフェッチするときは、そのタイムスタンプ値をフィルタとして使用することをおすすめします。

統計情報システムは、各名前空間に固有の統計情報も作成します。名前空間固有の統計情報の種類名には接頭辞として __Stat_Ns__ が付加され、その後にアプリケーション全体に適用される統計情報の種類名と同じ接尾辞が付きます。

アプリケーションが名前空間を使用していない場合は、統計情報システムは名前空間固有の統計情報を作成しません。Namespace 固有の統計情報は、関連する Namespace でのみ確認できます。

統計情報のリスト

使用可能な統計情報のリストは次のとおりです。

統計情報 統計情報エンティティの種類 説明
すべてのエンティティ __Stat_Total__
名前空間に固有のエントリ:
__Stat_Ns_Total__
すべてのエンティティ。追加プロパティ:

entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数
composite_index_bytes: 複合インデックス エントリのストレージ サイズ(バイト単位)。
composite_index_count: 複合インデックスのエントリ数。
名前空間内のすべてのエンティティ __Stat_Namespace__
__Stat_Namespace__ エンティティは名前空間が発生するたびに作成され、空文字列の名前空間にのみ存在する点に注意してください。
名前空間内のすべてのエンティティ

subject_namespace: 名前空間の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数
composite_index_bytes: 複合インデックス エントリのストレージ サイズ(バイト単位)。
composite_index_count: 複合インデックスのエントリ数。

詳細については、このドキュメントの統計情報の制限事項セクションをご覧ください。
アプリケーション定義のインデックス内のすべてのエントリ __Stat_Kind_CompositeIndex__
名前空間に固有のエントリ:
__Stat_Ns_Kind_CompositeIndex__
複合インデックス テーブル内のエントリ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加プロパティ:

alphanumeric_id: インデックスの英数字の識別子。gcloud と API で使用される同じ識別子。
index_id: インデックス ID の内部整数表現。gcloud メソッドと API メソッドの場合は、代わりに alphanumeric_id を使用します。
kind_name: 種類名の表現(文字列)
last_known_usage_timestamp: このインデックスが最後にクエリを処理した日時。常に stat_tracked_since_time~タイムスタンプまでの時間になります。その期間に使用が記録されていない場合は null に設定します。__Stat_Ns_Kind_CompositeIndex__ には存在しません。
stat_tracked_since_time: インデックスの使用が確認されている期間の開始日時。__Stat_Ns_Kind_CompositeIndex__ には存在しません。
組み込みインデックス内のすべてのエントリ __Stat_Kind_BuiltinIndex__ データベースに組み込まれているインデックスに関する情報。組み込みインデックスごとに 1 つの統計情報エンティティ。追加プロパティ:

property_name: インデックスに登録されたプロパティの名前。
kind_name: 種類名の表現(文字列)
api_scope: Firestore または Datastore
query_scope: インデックス クエリ スコープ。Datastore データベースの場合は常に COLLECTION_GROUP(kind)に設定します。
value_mode: クエリスコープのモード(ASCDESC など)。
last_known_usage_timestamp: このインデックスがクエリを処理した最終日時。常に stat_tracked_since_time~タイムスタンプまでの時間になります。その期間に使用が記録されていない場合は null に設定します。
stat_tracked_since_time: インデックスの使用が判明している期間の開始時間。
種類のエンティティ __Stat_Kind__
名前空間に固有のエントリ:
__Stat_Ns_Kind__
種類のエンティティ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加のプロパティ:

kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数
composite_index_bytes: 複合インデックス エントリのストレージ サイズ(バイト単位)。
composite_index_count: 複合インデックスのエントリ数。
種類のルート エンティティ __Stat_Kind_IsRootEntity__
名前空間に固有のエントリ:
__Stat_Ns_Kind_IsRootEntity__
エンティティ グループのルート エンティティ(祖先となる親を持たないエンティティ)となっている種類のエンティティ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加のプロパティ:

kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
種類の非ルート エンティティ __Stat_Kind_NotRootEntity__
名前空間に固有のエントリ:
__Stat_Ns_Kind_NotRootEntity__
エンティティ グループの非ルート エンティティ(祖先となる親を持つエンティティ)となっている種類のエンティティ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加のプロパティ:

kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
型のプロパティ __Stat_PropertyType__
名前空間に固有のエントリ:
__Stat_Ns_PropertyType__
すべてのエンティティにわたる値の型のプロパティ。値の型ごとに 1 つの統計情報エンティティが作成されます。追加のプロパティ:

property_type: 値の型の名前(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数
種類ごとの型のプロパティ __Stat_PropertyType_Kind__
名前空間に固有のエントリ:
__Stat_Ns_PropertyType_Kind__
特定の種類のエンティティにわたる値の型のプロパティ。プロパティの型と種類の組み合わせごとに 1 つの統計情報エンティティが作成されます。

追加のプロパティ:

property_type: 値の型の名前(文字列)
kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックスのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数。

詳細については、このドキュメントの統計情報の制限事項セクションをご覧ください。
名前を持つプロパティ __Stat_PropertyName_Kind__
名前空間に固有のエントリ:
__Stat_Ns_PropertyName_Kind__
特定の種類のエンティティにわたる特定の名前を持つプロパティ。一意のプロパティ名と種類の組み合わせごとに 1 つの統計情報エンティティが作成されます。追加のプロパティ:

property_name: プロパティの名前(文字列)
kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数
名前を持つ型のプロパティ __Stat_PropertyType_PropertyName_Kind__
名前空間に固有のエントリ:
__Stat_Ns_PropertyType_PropertyName_Kind__
特定の種類のエンティティ全体のプロパティで、特定の名前を持ち、特定の値の型のプロパティとなっているもの。プロパティ名、値の型、データベースに存在する種類の組み合わせごとに 1 つの統計情報エンティティが作成されます。

追加のプロパティ:

property_type: 値の型の名前(文字列)
property_name: プロパティの名前(文字列)
kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)。
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)。
builtin_index_count: 組み込みインデックスのエントリ数。

詳細については、このドキュメントの統計情報の制限事項セクションをご覧ください。

一部の統計情報は、プロパティ値の型を文字列として名前で参照します。名前は次のとおりです。

  • "Blob"
  • "BlobKey"
  • "Boolean"
  • "Category"
  • "Date/Time"
  • "Email"
  • "Float"
  • "GeoPt"
  • "IM"
  • "Integer"
  • "Key"
  • "Link"
  • "NULL"
  • "PhoneNumber"
  • "PostalAddress"
  • "Rating"
  • "ShortBlob"
  • "String"
  • "Text"
  • "User"

統計情報の制限事項

統計情報には次の制限があります。

  • __Stat_PropertyType_Kind__ プロパティと __Stat_PropertyType_PropertyName_Kind__ プロパティは、ARRAY 値の型のプロパティ型のメタデータを返し、配列内の値ごとにプロパティの型を個別に記録します。たとえば、配列プロパティに文字列のリストが格納されている場合、プロパティはプロパティの型を STRING として記録しますが、実際のプロパティの型は ARRAY<STRING> です。
  • __Stat_Namespace__ エンティティには、__Stat_Ns_Total__ レコードと同じ情報が含まれています。__Stat_Namespace__ エンティティは空の名前空間に格納されていて、属する名前空間を示す subject_namespace フィールドが組み込まれています。__Stat_Ns_Total__ レコードは参照先の名前空間に格納されるため、subject_namespace フィールドを含んでいません。そのため、(空文字列の名前空間から)種類 __Stat_Namespace__ に対してクエリを実行し、bytes の降順で並べ替えると、ストレージを最も多く消費している名前空間が最初に並べられます。名前空間をまたぐクエリは可能でないため、__Stat_Ns_Total__ エンティティに対するどのようなクエリでも、生成されるレコードは最大で 1 つです。

統計情報エンティティの破棄の順序

何千もの名前空間、種類、プロパティ名を使用するアプリケーションでは、多数の統計情報エンティティが必要になります。統計情報の保管と更新にかかるオーバーヘッドを削減するために、Datastore モードの Firestore データベースは、後述の順序で統計情報エンティティを順次破棄していきます。

要約統計情報エンティティ __Stat_Kind_CompositeIndex____Stat_PropertyType____Stat_Total__ は破棄されません。

統計情報エンティティは、次のデフォルトの順序でグループごとに破棄されます。

  1. 名前空間、種類、プロパティに基づく統計情報:

    • __Stat_Ns_PropertyName_Kind__
    • __Stat_Ns_PropertyType_PropertyName_Kind__
  2. 種類とプロパティに基づく統計情報

    • __Stat_PropertyName_Kind__
    • __Stat_PropertyType_PropertyName_Kind__
  3. 名前空間に基づく統計情報

    • __Stat_Namespace__
    • __Stat_Ns_Kind_CompositeIndex__
    • __Stat_Ns_PropertyType__
    • __Stat_Ns_Total__

種類統計情報エンティティは、次の順序で破棄されます。

  1. 名前空間と種類に基づく統計情報

    • __Stat_Ns_Kind__
    • __Stat_Ns_Kind_IsRootEntity__
    • __Stat_Ns_Kind_NotRootEntity__
    • __Stat_Ns_PropertyType_Kind__
  2. 種類に基づく統計情報

    • __Stat_Kind__
    • __Stat_Kind_IsRootEntity__
    • __Stat_Kind_NotRootEntity__
    • __Stat_PropertyType_Kind__

次のステップ