GAE Cloud Datastore能否获取最常读取模型的读取频率信息?
获取Cloud Datastore模型读取频率并排序的方法
问题描述
我希望获取按读取频率降序排列的模型列表,目前已尝试以下代码:
from google.cloud import datastore import math def run_quickstart(): # [START datastore_quickstart] # Imports the Google Cloud client library client = datastore.Client() query = client.query(kind='__Stat_Kind__') detail_list = [] items = list(query.fetch()) for results in items: results = results.viewitems() detail_list.append(results) print detail_list if __name__ == '__main__': run_quickstart()
该查询能获取模型及其属性的相关详情,包括Entity count、Built-in index count、Built-in index size、Data size、Composite index size、Composite index count,但没有读取频率相关信息。请问GAE Cloud Datastore是否提供此类数据库读取频率的信息?
回答
你提到的__Stat_Kind__实体确实只存储了实体数量、索引大小这类静态存储统计,不包含读取频率这类访问量指标。不过Google Cloud Datastore确实提供了获取读取频率的途径,主要有两种方式:
1. 使用Cloud Monitoring(原Stackdriver Monitoring)
Cloud Monitoring提供了Datastore的详细访问指标,其中就包括按实体类型(Kind)分组的读取次数统计:
- 指标名称:
datastore.googleapis.com/entity/read_count - 你可以在Cloud Console的Monitoring界面中,创建自定义仪表盘,筛选这个指标并按Kind分组,就能看到每个模型的读取频率;如果需要程序化获取,可以使用Cloud Monitoring的API来查询这些指标数据,然后进行排序处理。
2. 应用层自定义统计
如果需要更灵活的统计(比如按特定时间范围、自定义维度),或者需要直接在Datastore内存储这些数据,可以在应用代码中自己记录读取操作:
- 每次执行某个Kind的读取操作时,更新一个对应的计数器实体(比如创建一个
KindReadStats的Kind,每个实体对应一个模型,包含kind_name和read_count字段) - 使用Datastore的事务来保证计数器更新的原子性(避免并发更新导致计数不准确)
- 定期查询这些计数器实体,按
read_count降序排列就能得到你需要的列表
举个简单的计数器更新示例:
def increment_read_counter(client, kind_name): key = client.key('KindReadStats', kind_name) with client.transaction(): stats = client.get(key) if not stats: stats = datastore.Entity(key=key) stats['read_count'] = 0 stats['read_count'] += 1 client.put(stats)
这样每次读取某个Kind的实体时调用这个函数,之后就可以通过查询KindReadStats实体并按read_count排序来获取结果了。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

