NDB 管理

有些工具與 API 可讓您輕鬆管理應用程式的儲存資料。

Google Cloud Platform 主控台

使用 GCP Console 時,請記得 NDB 是透過 Cloud Datastore「以及」Memcache 進行實作。 NDB 在「讀取」值時,會先檢查 Memcache;只有無法在 Memcache 中找到該值時,才會從 Cloud Datastore 讀取。

因此,如果您使用 GCP 主控台編輯 Cloud Datastore 中的實體,而該值位於 Memcache 中,則應用程式可能還是會使用「舊」值。您可以清除 Memcache 來解決這個問題,但這可能會帶來麻煩;如果您常常需要「手動」修改這些值,您可能會想在應用程式中設定 UI 以透過 NDB 用戶端程式庫寫入這些值;透過 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):將指定種類名稱的 dict 對應屬性名稱傳回至「STRING」、「BOOLEAN」或「INT64」之類的表示名稱清單。

這些函式提供選用的「start」和「end」引數,可用於限制查詢特定範圍。這裡的 start 會包含值,但 end 不含值。兩者均預設為 None。舉例來說,如要取得開頭為小寫字母的所有命名空間,您可以呼叫 get_namespaces('a', chr(ord('z') + 1))。除 get_namespaces() 以外的所有函式會間接限制為使用目前的命名空間。中繼資料的取得與查詢作業計費方式與 Cloud Datastore 取得與查詢作業相同

統計資料查詢

Cloud Datastore 會留存與應用程式預存資料相關的統計資料,例如有多少實體符合特定種類,或者特定類型的屬性值使用多少空間。您可以在 GCP 主控台的資訊主頁頁面查看這些統計資料。

您也可以使用 Cloud Datastore API 查詢名稱特殊的實體,透過程式在應用程式內部存取這些值。只要實體種類名稱的開頭和結尾有兩條底線,就可以存取其中的每項統計資料。例如,每個應用程式都只有一個屬於 __Stat_Total__ 種類的實體,這個實體代表與 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
複合式索引表中的項目;每一個統計資料分別代表一種既存實體。其他屬性:

index_id:索引 ID。
kind_name:代表種類的名稱 (字串)
某個種類的實體 __Stat_Kind__
Python 類別:KindStat
命名空間專用項目:
__Stat_Ns_Kind__
Python 類別:NamespaceKindStat
屬於某個種類的實體;每一個統計資料分別代表一種既存實體。其他屬性:

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
某個種類的實體,該實體為實體群組根實體 (沒有祖系父項);每一個統計資料分別代表一種既存實體。其他屬性:

kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
某個種類的非根實體 __Stat_Kind_NotRootEntity__
Python 類別:KindNotRootEntityStat
命名空間專用項目:
__Stat_Ns_Kind_NotRootEntity__
Python 類別:NamespaceKindNotRootEntityStat
某個種類的實體,該實體不是實體群組根實體 (有祖系父項);每一個統計資料分別代表一種既存實體。其他屬性:

kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
某個類型的屬性 __Stat_PropertyType__
Python 類別:PropertyTypeStat
命名空間專用項目:
__Stat_Ns_PropertyType__
Python 類別:NamespacePropertyTypeStat
所有實體之值類型的屬性;每一個統計資料分別代表一種既存實體。其他屬性:

property_type:值類型的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
builtin_index_bytes:內建索引項目的儲存空間,以位元組為單位。
builtin_index_count:內建索引項目的數量。
各種類中屬於某一類型的屬性 __Stat_PropertyType_Kind__
Python 類別:KindPropertyTypeStat
命名空間專用項目:
__Stat_Ns_PropertyType_Kind__
Python 類別:NamespaceKindPropertyTypeStat
特定種類實體之值類型的屬性;每一個統計資料分別代表一個屬性類型和種類的組合。其他屬性:

property_type:值類型的名稱 (字串)
kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
builtin_index_bytes:內建索引項目的儲存空間,以位元組為單位。
builtin_index_count:內建索引項目的數量。
具有名稱的屬性 __Stat_PropertyName_Kind__
Python 類別:KindPropertyNameStat
命名空間專用項目:
__Stat_Ns_PropertyName_Kind__
Python 類別:NamespaceKindPropertyNameStat
特定種類的實體中,有特定名稱的屬性;每個統計資料分別代表一個不重複的屬性名稱和種類組合。其他屬性:

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 中的一個屬性名稱、值類型和種類組合。其他屬性:

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 2 適用的 App Engine 標準環境