NDB 管理

保存されたアプリケーション データを簡単に管理できるようにするためのツールと API が用意されています。

Google Cloud Platform Console

GCP Console を使用するときには、Cloud Datastore および memcache によって NDB が実装されることに注意してください。NDB が値を「読み取る」ときには、まず memcache を確認します。memcache に値が見つからない場合に限り、Cloud Datastore から読み取ります。

したがって、GCP Console を使用して Google Cloud Datastore のエンティティを編集する際に、その値が memcache にある場合、アプリケーションが引き続き「古い」値を使用する可能性があります。この問題は、memcache をパージすることで回避できますが、これは複雑な作業です。「手作業で」値を頻繁に調整する必要がある場合は、NDB クライアント ライブラリを介して値を書き込む UI をアプリケーション内にセットアップできます。NDB を介して書き込むことで、Cloud Datastore と memcache の同期が保たれます。

メタデータ クエリ

NDB はメタデータ クエリ API をサポートしています。これにより、アプリケーションは Cloud Datastore の使用に関する一般情報を取得できます。この API は google.appengine.ext.ndb.metadata モジュール内にあり、次の関数を含んでいます。

  • get_namespaces(start=None, end=None): 名前空間名のリストを返します
  • get_kinds(start=None, end=None): 種類名のリストを返します
  • get_properties_of_kind(kind, start=None, end=None): 特定の種類名に関するプロパティ名のリストを返します
  • get_representations_of_kind(kind, start=None, end=None): 特定の種類名に関するプロパティ名を表現名(「STRING」、「BOOLEAN」、「INT64」など)のリストにマップする辞書を返します。

これらの関数のオプション引数 start および end を使用すると、クエリを特定の範囲に限定できます。ここで、start はその数値を含み、end はその数値を含みません。どちらもデフォルトは None です。たとえば、小文字で始まるすべての名前空間を取得するには get_namespaces('a', chr(ord('z') + 1)) を呼び出すことができます。get_namespaces() を除く上記のすべての関数は、暗黙的に現在の名前空間に限定されます。メタデータの取得とクエリは、Cloud Datastore の取得およびクエリと同じ方法で課金されます

統計クエリ

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

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

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

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

アプリケーションは、パッケージ google.appengine.ext.ndb.stats で提供されるモデルクラスを使って統計情報エンティティにアクセスできます。

from google.appengine.ext.ndb import stats

global_stat = stats.GlobalStat.query().get()
print 'Total bytes stored: %d' % global_stat.bytes
print 'Total entities stored: %d' % global_stat.count

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

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

また、統計情報システムは、それぞれの名前空間に固有の統計情報も作成します。アプリケーションが 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__
Python クラス: GlobalStat
名前空間に固有のエントリ:
__Stat_Ns_Total__
Python クラス: NamespaceGlobalStat
すべてのエンティティ。追加プロパティは次のとおりです。

entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)
builtin_index_count: 組み込みインデックスのエントリ数
composite_index_bytes: 複合インデックス エントリのストレージ サイズ(バイト単位)
composite_index_count: 複合インデックスのエントリ数
名前空間内のすべてのエンティティ __Stat_Namespace__
Python クラス: NamespaceStat
__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__

Python クラス: KindStat
複合インデックス テーブル内のエントリ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加プロパティは次のとおりです。

index_id: インデックス ID
kind_name: 種類名の表現(文字列)
種類のエンティティ __Stat_Kind__
Python クラス: KindStat
名前空間に固有のエントリ:
__Stat_Ns_Kind__
Python クラス: NamespaceKindStat
種類のエンティティ。格納されているエンティティの種類ごとに 1 つの統計情報エンティティが作成されます。追加プロパティは次のとおりです。

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

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

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

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

property_type: 値の型の名前(文字列)
kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)
builtin_index_bytes: 組み込みインデックスのストレージ サイズ(バイト単位)
builtin_index_count: 組み込みインデックスのエントリ数
名前を持つプロパティ __Stat_PropertyName_Kind__
Python クラス: KindPropertyNameStat
名前空間に固有のエントリ:
__Stat_Ns_PropertyName_Kind__
Python クラス: NamespaceKindPropertyNameStat
特定の種類のエンティティにわたる特定の名前を持つプロパティ。一意のプロパティ名と種類の組み合わせごとに 1 つの統計情報エンティティが作成されます。追加プロパティは次のとおりです。

property_name: プロパティの名前(文字列)
kind_name: 種類名の表現(文字列)
entity_bytes: エンティティ テーブルのストレージ サイズ(バイト単位)
builtin_index_bytes: 組み込みインデックス エントリのストレージ サイズ(バイト単位)
builtin_index_count: 組み込みインデックスのエントリ数
名前を持つ型のプロパティ __Stat_PropertyType_PropertyName_Kind__
Python クラス: KindPropertyNamePropertyTypeStat
名前空間に固有のエントリ:
__Stat_Ns_PropertyType_PropertyName_Kind__
Python クラス: NamespaceKindPropertyNamePropertyTypeStat
特定の種類のエンティティ全体のプロパティで、特定の名前を持ち、特定の値の型のプロパティとなっているもの。プロパティ名、値の型、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"
このページは役立ちましたか?評価をお願いいたします。

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

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