Datastore 統計資料

Firestore (Datastore 模式) 會留存與應用程式預存資料相關的統計資料,例如有多少實體符合特定種類,或者特定類型的屬性值使用多少空間。

您可以在 Google Cloud 控制台中,透過下列其中一種方式查看這些統計資料:

  • 在「資訊主頁」頁面。
  • 在「Entities」(實體) 頁面中,以 SELECT * FROM __Stat_Kind__ 形式執行 GQL 查詢。
  • 使用 Datastore API 查詢名稱特殊的實體,以程式輔助方式在應用程式內部存取這些值。如要進一步瞭解 Datastore API,請參閱「API 與參考資料」。

Datastore 會使用開頭和結尾為兩條底線的種類名稱,識別提供資料統計資訊的特殊實體。這些稱為統計資料實體。舉例來說,每個應用程式都有一個 __Stat_Total__ 種類的實體,代表 Datastore 模式資料庫中所有實體的統計資料。

統計資料實體會追蹤資料相關資訊,並提供資料用量的洞察資料。系統會自動建立這些項目。每個統計資料實體都具有下列屬性:

  • count:統計資料考慮的項目數 (長整數)
  • bytes:此統計資料的項目總大小 (長整數)
  • timestamp:最近一次更新統計資料的時間 (日期時間值)

每個實體都屬於特定種類。統計資料類型:指出收集或使用的統計資料類別。使用種類來識別統計資料的用途,例如最佳化查詢、提升效能或資料分析。

有些統計資料種類也有其他屬性,詳情請參閱本文的「統計資料清單」一節。

統計資料系統建立新的統計資料實體時,不會立即刪除舊的統計資料實體。如要統一查看一致的統計資料,最佳方式就是使用最新的 timestamp 查詢統計資料實體,然後在擷取其他統計資料實體時,使用該時間戳記值為做為篩選條件。

統計資料系統也會建立各個命名空間專屬的統計資料。命名空間專屬統計資料的種類名稱開頭為 __Stat_Ns__,後方則與適用於整個應用程式的統計資料種類名稱相同。

如果應用程式不使用命名空間,統計資料系統就不會建立命名空間專屬的統計資料。您只能在相關命名空間中找到命名空間專屬的統計資料。

統計資料清單

可用的統計資料如下:

統計資料 統計資料實體種類 說明
所有實體 __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__
複合式索引表中的項目;儲存的每種實體各有一個統計資料實體。其他屬性:

alphanumeric_id:索引的英數識別碼。與 gcloud 和 API 中使用的 ID 相同。
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__ 資料庫中內建索引的相關資訊。每個內建索引各有一個統計資料實體。其他屬性:

property_name:已建立索引的屬性名稱。
kind_name:代表種類的名稱 (字串)。
api_scopeFirestoreDatastore
query_scope:索引查詢範圍。如果是 Datastore 資料庫,請一律設為 COLLECTION_GROUP (種類)。
value_mode:查詢範圍的模式,例如 ASCDESC
last_known_usage_timestamp:這個索引上次提供查詢服務的時間。一律會是 stat_tracked_since_time 和時間戳記之間的時間。如果該時間範圍內未記錄任何使用情況,請設為 null
stat_tracked_since_time:索引用量已知的時間範圍開頭。
某個種類的實體 __Stat_Kind__
命名空間專用項目:
__Stat_Ns_Kind__
某個種類的實體;儲存的每種實體各有一個統計資料實體。其他屬性:

kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
builtin_index_bytes:內建索引項目的儲存空間,以位元組為單位。
builtin_index_count:內建索引項目的數量。
composite_index_bytes:複合式索引項目的儲存空間,以位元組為單位。
composite_index_count:複合式索引項目的數量。
某個種類的根實體 __Stat_Kind_IsRootEntity__
命名空間專用項目:
__Stat_Ns_Kind_IsRootEntity__
某個種類的實體,該實體為實體群組根實體 (沒有祖系父項);儲存的每種實體各有一個統計資料實體。其他屬性:

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

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

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

其他屬性:

property_type:值類型的名稱 (字串)
kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
builtin_index_bytes:內建索引項目的儲存空間,以位元組為單位。
builtin_index_count:內建索引項目的計數。

詳情請參閱本文的「統計資料限制」一節。
具有名稱的屬性 __Stat_PropertyName_Kind__
命名空間專用項目:
__Stat_Ns_PropertyName_Kind__
在指定種類的實體中具有特定名稱的屬性;每個不重複的屬性名稱和種類組合各有一個統計資料實體。其他屬性:

property_name:屬性的名稱 (字串)
kind_name:代表種類的名稱 (字串)
entity_bytes:實體資料表的儲存空間,以位元組為單位。
builtin_index_bytes:內建索引項目的儲存空間,以位元組為單位。
builtin_index_count:內建索引項目的數量。
某個類型且具有名稱的屬性 __Stat_PropertyType_PropertyName_Kind__
命名空間專用項目:
__Stat_Ns_PropertyType_PropertyName_Kind__
指定種類實體中具有特定名稱且屬於特定值類型的屬性;資料庫中的每個屬性名稱、值類型和種類組合各有一個統計資料實體。

其他屬性:

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__ 實體進行任何查詢,最多只會出現一筆記錄。

統計資料實體捨棄順序

如果應用程式有數千個命名空間、種類或屬性名稱,則需要大量的統計資料實體。為減少儲存及更新統計資料的負擔,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__

後續步驟