如何获取数据存储区中表的行数?

Aft*_*ock 7 size google-app-engine count google-cloud-datastore

在许多情况下,使用Google Application Engine了解数据存储区中表(一种)中的行数可能很有用.
没有明确而快速的解决方案.至少我没有找到一个..你呢?

Dav*_*ill 14

您可以使用数据存储区统计信息有效地获取特定类型的所有实体(即表中的行数)的计数.简单的例子:

from google.appengine.ext.db import stats
kind_stats = stats.KindStat().all().filter("kind_name =", "NameOfYourModel").get()
count = kind_stats.count
Run Code Online (Sandbox Code Playgroud)

你可以找到如何获取最新的统计数据更详细的例子在这里(GAE可以保持统计数据的多个副本-一个5分钟前,一个30分钟前,等等).

请注意,这些统计数据不会不断更新,因此它们落后于实际数量.如果您确实需要实际计数,那么您可以跟踪自己的自定义统计表中的计数,并在每次创建/删除实体时更新它(尽管这样做的成本会高得多).

更新03-08-2015:使用数据存储区统计信息可能会导致过时的结果.如果这不是一个选项,另外两种方法是保持计数器或分片计数器.(你可以在这里阅读更多关于这些的信息).如果您需要实时结果,请仅查看这两个.


小智 7

App Engine中没有"选择计数(*)"的概念.您需要执行以下操作之一:

  1. 在查询时执行您想要的实体的"仅键"(索引遍历),并逐个计算它们.这具有慢读取的成本.
  2. 在写入时更新计数 - 这有利于以每次写入/更新的更高成本进行极快速读取.成本:您必须提前了解您想要计算的内容.你会在写作时支付更高的费用.
  3. 使用任务队列,cron作业或新的Mapper API异步更新所有计数.这需要半新鲜的权衡.