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_scope:Firestore或Datastore。• query_scope:索引查詢範圍。如果是 Datastore 資料庫,請一律設為COLLECTION_GROUP(種類)。• value_mode:查詢範圍的模式,例如ASC或DESC。• 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__。
統計資料實體會依下列預設順序分組:
- 以命名空間、種類和屬性為主的統計資料: - __Stat_Ns_PropertyName_Kind__
- __Stat_Ns_PropertyType_PropertyName_Kind__
 
- 以種類和屬性為主的統計資料 - __Stat_PropertyName_Kind__
- __Stat_PropertyType_PropertyName_Kind__
 
- 以命名空間為主的統計資料 - __Stat_Namespace__
- __Stat_Ns_Kind_CompositeIndex__
- __Stat_Ns_PropertyType__
- __Stat_Ns_Total__
 
類型統計資料實體的捨棄順序如下:
- 以命名空間和種類為主的統計資料 - __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__