How to get the number of rows in a table in a Data

2020-02-26 10:07发布

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?

3条回答
该账号已被封号
2楼-- · 2020-02-26 10:48

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());
查看更多
Viruses.
3楼-- · 2020-02-26 11:06

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.
查看更多
Root(大扎)
4楼-- · 2020-02-26 11:11

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.

查看更多
登录 后发表回答