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

发布于 2024-09-04 07:47:58 字数 98 浏览 4 评论 0原文

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

In many cases, it could be useful to know the number of rows in a table (a kind) in a datastore using Google Application Engine.
There is not clear and fast solution . At least I have not found one.. Have you?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

吹梦到西洲 2024-09-11 07:47:58

您可以使用 数据存储统计。简单示例:

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

您可以找到有关如何获取最新统计信息的更详细示例 此处(GAE 可能会保留统计数据的多份副本 - 一份为 5 分钟前,一份为 30 分钟前,等等)。

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

2015 年 3 月 8 日更新:使用数据存储统计信息可能会导致结果过时。如果这不是一个选择,另外两种方法是保留计数器或分片计数器。 (您可以在此处阅读有关这些内容的更多信息)。仅当您需要实时结果时才查看这两个。

You can efficiently get a count of all entities of a particular kind (i.e., number of rows in a table) using the Datastore Statistics. Simple example:

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

You can find a more detailed example of how to get the latest stats here (GAE may keep multiple copies of the stats - one for 5min ago, one for 30min ago, etc.).

Note that these statistics aren't constantly updated so they lag a little behind the actual counts. If you really need the actual count, then you could track counts in your own custom stats table and update it every time you create/delete an entity (though this will be quite a bit more expensive to do).

Update 03-08-2015: Using the Datastore Statistics can lead to stale results. If that's not an option, another two methods are keeping a counter or sharding counters. (You can read more about those here). Only look at these 2 if you need real-time results.

独享拥抱 2024-09-11 07:47:58

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

  1. 在查询时对所需的实体执行“仅键”(索引遍历)并将它们一一计数。这会带来读取缓慢的代价。
  2. 写入时更新计数 - 这样做的好处是读取速度极快,但每次写入/更新的成本更高。成本:你必须提前知道你想要计算什么。您将在写入时支付更高的成本。
  3. 使用任务队列、cron 作业或新的Mapper API 异步更新所有计数。这样做的代价是半新鲜。

There's no concept of "Select count(*)" in App Engine. You'll need to do one of the following:

  1. Do a "keys-only" (index traversal) of the Entities you want at query time and count them one by one. This has the cost of slow reads.
  2. Update counts at write time - this has the benefit of extremely fast reads at a greater cost per write/update. Cost: you have to know what you want to count ahead of time. You'll pay a higher cost at write time.
  3. Update all counts asynchronously using Task Queues, cron jobs or the new Mapper API. This has the tradeoff of being semi-fresh.
垂暮老矣 2024-09-11 07:47:58

你可以数一下没有。使用 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());

You can count no. of rows in Google App Engine using com.google.appengine.api.datastore.Query as follow:

   int count;   
   Query qry=new Query("EmpEntity");   
   DatastoreService datastoreService = DatastoreServiceFactory.getDatastoreService();
   count=datastoreService.prepare(qry).countEntities(FetchOptions.Builder.withDefaults());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文