Java 8 中的 Datastore 統計資料

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

您也可以使用 Cloud Datastore API 查詢名稱特殊的實體,透過程式在應用程式內部存取這些值。只要實體種類名稱的開頭和結尾有兩條底線,就可以存取其中的每項統計資料。例如,每個應用程式都只有一個屬於 __Stat_Total__ 種類的實體,這個實體代表與 Cloud Datastore 中所有實體相關的統計資料總和。每個統計資料實體都具有下列屬性:

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

有些統計資料種類也有其他屬性,如下所示:

Java 應用程式可以使用低階 API 存取統計資料實體,例如:

Java 8

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity globalStat = datastore.prepare(new Query("__Stat_Total__")).asSingleEntity();
Long totalBytes = (Long) globalStat.getProperty("bytes");
Long totalEntities = (Long) globalStat.getProperty("count");

Java 7

DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Entity globalStat = datastore.prepare(new Query("__Stat_Total__")).asSingleEntity();
Long totalBytes = (Long) globalStat.getProperty("bytes");
Long totalEntities = (Long) globalStat.getProperty("count");

統計資料系統建立新的統計資料實體時,不會立即刪除舊的統計資料實體。 如要取得統計資料的一致視圖,最佳方式就是透過最新的 timestamp 來查詢 __Stat_Total__ 實體,然後使用該時間戳記值當做篩選器來擷取其他統計資料實體。

計算出來的統計資料值會包含這些統計資料實體。統計資料實體佔用的空間,與應用程式使用的獨特種類數及屬性名稱數有關。

統計資料系統也會建立各個命名空間專屬的統計資料。請注意,如果應用程式不使用 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__
命名空間專用項目:
__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__
複合式索引表中的項目;儲存的每種實體各有一個統計資料實體。其他屬性:

index_id:索引 ID。
kind_name:代表種類的名稱 (字串)
某個種類的實體 __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__
指定種類實體中具有特定名稱且屬於特定值類型的屬性;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"
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 8 適用的 App Engine 標準環境