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

时间:2010-06-07 10:55:59

标签: google-app-engine count size google-cloud-datastore

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

3 个答案:

答案 0 :(得分:14)

您可以使用Datastore Statistics有效地获取特定类型的所有实体(即表中的行数)的计数。简单的例子:

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

您可以找到更详细的示例,了解如何获取最新统计信息here(GAE可能会保留多份统计信息 - 一次用于5分钟,一次用于30分钟,等等。)

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

更新03-08-2015 :使用数据存储区统计信息可能会导致过时的结果。如果这不是一个选项,另外两种方法是保持计数器或分片计数器。 (You can read more about those here)。如果您需要实时结果,请仅查看这两个。

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

你可以算不上。使用com.google.appengine.api.datastore.Query进行的Google App Engine中的行如下所示:

   int count;   
   Query qry=new Query("EmpEntity");   
   DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
   count=datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults());