有些工具與 API 可讓您輕鬆管理應用程式的儲存資料。
Google Cloud 控制台
使用 Google Cloud console時,請記得 NDB 是透過 Datastore「以及」Memcache 進行實作。NDB 在「讀取」值時,會先檢查 Memcache,如果在 Memcache 中找不到值,才會從 Datastore 讀取。
因此,如果您使用 Google Cloud 控制台編輯 Datastore 中的實體,應用程式可能仍會使用 memcache 中的「舊」值。您可以清除 Memcache 來解決這個問題,不過,這會造成相當大的干擾。如果您經常需要「手動」調整值,建議您在應用程式中設定 UI,以便透過 NDB 用戶端程式庫寫入值;透過 NDB 寫入可確保 Datastore 和 Memcache 保持同步。
中繼資料查詢
NDB 支援中繼資料查詢 API。這可讓應用程式取得一些關於使用 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)
:針對指定的kind 名稱傳回屬性名稱清單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()
以外,所有這些都會間接受限於目前的命名空間。中繼資料的取得與查詢作業計費方式與 Datastore 取得與查詢作業相同。
統計資料查詢
Datastore 會保留與應用程式預存資料相關的統計資料,例如有多少實體符合特定種類,或者特定類型的屬性值使用多少空間。您可以在 Google Cloud 控制台的「資訊主頁」頁面查看這些統計資料。
您也可以使用 Datastore API 查詢名稱特殊的實體,以程式輔助方式在應用程式內部存取這些值。每個統計資料都可當成實體來存取,而實體種類名稱的開頭和結尾是兩條底線。例如,每個應用程式都只有一個屬於 __Stat_Total__
種類的實體,這個實體代表與 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
實體,然後在擷取其他統計資料實體時,使用該時間戳記值為篩選器。
計算出來的統計資料值會包含這些統計資料實體。統計資料實體占用的空間,與應用程式使用的獨特種類數及屬性名稱數有關。
統計資料系統也會建立各個命名空間專屬的統計資料。請注意,如果應用程式不使用 Datastore 命名空間,就不會建立命名空間專屬的統計資料。命名空間專屬的統計資料會出現在這些資料的特定命名空間中。命名空間專屬統計資料的種類名稱,開頭均為 __Stat_Ns_
,結尾則對應整個應用程式的統計資料種類。
如果應用程式有數千個命名空間、種類或屬性名稱,則需要非常大量的統計資料實體。為了讓儲存及更新統計資料的負擔保持在合理範圍內,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 |
指定種類實體中具有特定名稱且屬於特定值類型的屬性;Datastore 中的每個屬性名稱、值類型和種類組合各有一個統計資料實體。其他屬性: • property_type ,值類型的名稱 (字串)• property_name ,屬性名稱 (字串)• kind_name ,代表的類型名稱 (字串)• entity_bytes :實體表中的儲存空間,以位元組為單位。• builtin_index_bytes :內建索引項目的儲存空間,以位元組為單位。• builtin_index_count :內建索引項目的數量。 |
某些統計資料會按名稱以字串代表 Datastore 屬性值類型。這些名稱如下所示:
"Blob"
"BlobKey"
"Boolean"
"Category"
"Date/Time"
"Email"
"Float"
"GeoPt"
"IM"
"Integer"
"Key"
"Link"
"NULL"
"PhoneNumber"
"PostalAddress"
"Rating"
"ShortBlob"
"String"
"Text"
"User"