Datastore 模式 Firestore (Datastore) 会维护您在应用中存储的数据的相关统计信息,例如实体数量、实体种类,或者给定类型的属性值使用的空间大小。
您可以通过以下方式之一在 Google Cloud 控制台中查看这些统计信息:
- 在信息中心页面上。
- 在实体页面上,以 SELECT * FROM __Stat_Kind__的形式运行 GQL 查询。
- 在应用内以编程方式使用 Datastore API 查询特定命名的实体。如需详细了解 Datastore API,请参阅 API 与参考文档。
Datastore 使用以两个下划线开头和结尾的种类名称来标识提供有关您的数据的统计信息的特殊实体。这些实体称为统计信息实体。例如,每个应用都有一个种类为 __Stat_Total__ 的实体,该实体表示有关 Datastore 模式数据库中的所有实体的统计信息。
统计信息实体用于跟踪有关您数据的信息,并让您深入了解数据使用情况。它们是自动创建的。每个统计信息实体都具有以下属性:
- count:此统计信息所涉及的内容数量(长整数)
- bytes:此统计信息所对应的内容总大小(长整数)
- timestamp:此统计信息的最近更新时间(日期-时间值)
每个实体都属于特定类型。统计信息类型表示正在收集或使用的统计信息的类别。使用 kind 来确定统计信息的用途,例如优化查询、提高性能或进行数据分析。
某些统计信息种类还具有本文档的统计信息列表部分中列出的其他属性。
统计信息系统在创建新的统计信息实体时,不会立即删除之前的统计信息实体。获取一致的统计信息视图的最佳方法是查询具有最近 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 中使用的标识符相同。• 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__属性会针对数组值类型返回属性类型元数据,并单独记录数组中每个值的属性类型。例如,如果某个数组属性存储的是字符串列表,则该属性会记录属性类型为- 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__