Java 8 のデータストア統計

Cloud Datastore は、指定の種類のエンティティの数や指定のタイプのプロパティ値に使用されている領域など、アプリケーションのために保存されているデータの統計情報を維持します。このような統計情報は GCP Console のダッシュボード ページで確認できます。

また、アプリケーション内でプログラミングによってこれらの値にアクセスすることもできます。その場合、Cloud Datastore API を使って特定の名前のエンティティをクエリします。各統計情報には、先頭と末尾に 2 つのアンダースコアが付いた種類名を持つエンティティとしてアクセスできます。たとえば各アプリには __Stat_Total__ という種類のエンティティが 1 つだけ存在し、これは Cloud Datastore 内の全エンティティの合計に関する統計情報を表します。各統計情報エンティティには、次のプロパティがあります。

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

統計情報の一部の種類には、その他に下記で示すプロパティも用意されています。

Java アプリケーションでは、低レベル API を使用して統計エンティティにアクセスできます。次に例を示します。

Java 8

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity globalStat = datastore.prepare(new Query("__Stat_Total__")).asSingleEntity();
Long totalBytes = (Long) globalStat.getProperty("bytes");
Long totalEntities = (Long) globalStat.getProperty("count");

Java 7

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity globalStat = datastore.prepare(new Query("__Stat_Total__")).asSingleEntity();
Long totalBytes = (Long) globalStat.getProperty("bytes");
Long totalEntities = (Long) globalStat.getProperty("count");

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

統計情報エンティティは、計算済みの統計情報値に含まれます。統計情報エンティティは、アプリケーションで使用される一意の種類とプロパティ名の数に比例して容量を消費します。

また、統計情報システムは、それぞれの名前空間に固有の統計情報も作成します。アプリケーションが Cloud Datastore 名前空間を使用しない場合、名前空間に固有の統計情報が作成されないことに注意してください。それぞれの名前空間に固有の統計情報は、その名前空間の中に存在します。名前空間に固有の統計情報の種類名には接頭辞として __Stat_Ns_ が付加され、アプリケーション全体の統計情報の種類と同じ対応する接尾辞が付きます。

何千もの名前空間、種類、プロパティ名を使用するアプリケーションでは、非常に多数の統計情報エンティティが必要になります。統計情報の格納と更新にかかるオーバーヘッドを合理的な範囲に収めるために、Cloud Datastore では次の順序で統計情報エンティティが順次破棄されていきます。

  • 名前空間、種類、プロパティに基づく統計情報: __Stat_Ns_PropertyName_Kind____Stat_Ns_PropertyType_PropertyName_Kind__
  • 種類とプロパティに基づく統計情報: __Stat_PropertyName_Kind____Stat_PropertyType_PropertyName_Kind__
  • 名前空間と種類に基づく統計情報: __Stat_Ns_Kind____Stat_Ns_Kind_IsRootEntity____Stat_Ns_Kind_NotRootEntity____Stat_Ns_PropertyType_Kind__
  • 種類に基づく統計情報: __Stat_Kind____Stat_Kind_IsRootEntity____Stat_Kind_NotRootEntity____Stat_PropertyType_Kind__
  • 名前空間に基づく統計情報: __Stat_Namespace____Stat_Ns_Kind_CompositeIndex____Stat_Ns_PropertyType____Stat_Ns_Total__

要約統計情報のエンティティ(__Stat_Kind_CompositeIndex____Stat_PropertyType____Stat_Total__)は決して破棄されません。

次に、使用可能なすべての統計情報をまとめたリストを示します。

統計情報 統計情報エンティティの種類 説明
すべてのエンティティ __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 つの統計情報エンティティが作成されます。追加プロパティは次のとおりです。

index_id: インデックス ID
kind_name: 種類名の表現(文字列)
種類のエンティティ __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__
特定の種類のエンティティ全体のプロパティで、特定の名前を持ち、特定の値の型のプロパティとなっているもの。プロパティ名、値の型、Cloud Datastore に存在する種類の組み合わせごとに 1 つの統計情報エンティティが作成されます。追加プロパティは次のとおりです。

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

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

  • "Blob"
  • "BlobKey"
  • "Boolean"
  • "Category"
  • "Date/Time"
  • "Email"
  • "Float"
  • "GeoPt"
  • "IM"
  • "Integer"
  • "Key"
  • "Link"
  • "NULL"
  • "PhoneNumber"
  • "PostalAddress"
  • "Rating"
  • "ShortBlob"
  • "String"
  • "Text"
  • "User"
このページは役立ちましたか?評価をお願いいたします。

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

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