Python 2 不再受社区支持。我们建议您将 Python 2 应用迁移到 Python 3

Python 2 中的 Datastore 统计信息

注意强烈建议构建新应用的开发者使用 NDB 客户端库,它与 DB 客户端库相比具有多项优势,例如可通过 Memcache API 进行自动实体缓存。如果您当前使用的是较早的 DB 客户端库,请参阅 DB 到 NDB 的迁移指南

Datastore 维护为应用所存储数据的相关统计信息,例如给定种类的实体数量,或者给定类型的属性值使用的空间大小。您可以在 Cloud Console 中查看这些统计信息(信息中心页面)。

您还可以使用 Datastore API 查询特定命名的实体,在应用内以编程方式访问这些值。每项统计信息都可以作为实体(其种类名称以两条下划线开头和结尾)进行访问。例如,每个应用只有一个种类为 __Stat_Total__ 的实体,该实体表示有关 Datastore 数据库中的所有实体的总体统计信息。每个统计信息实体都具有以下属性:

  • count,此统计信息所涉及的内容数量(长整数)
  • bytes,此统计信息所对应的内容总大小(长整数)
  • timestamp,此统计信息的最近更新时间(日期-时间值)

某些统计信息种类还具有下面列出的额外属性。

Python 应用程序可以使用 google.appengine.ext.db.stats 文件包提供的 Model 类来访问统计实体。

from google.appengine.ext.db import stats

global_stat = stats.GlobalStat.all().get()
print 'Total bytes stored: %d' % global_stat.bytes
print 'Total entities stored: %d' % global_stat.count

统计信息系统在创建新的统计信息实体时,不会立即删除旧的统计信息实体。获取统计信息的一致视图的最佳方法是查询具有最新 timestampGlobalStat 实体,然后在提取其他统计信息实体时,将该时间戳值用作过滤器。

统计信息实体包含在计算得出的统计值中。 统计信息实体占用的空间取决于应用的唯一种类和属性名称的数量。

统计信息系统还将创建特定于每个命名空间的统计信息。请注意,如果应用不使用 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"