Как получить количество строк в таблице в хранилище данных? - PullRequest
7 голосов
/ 07 июня 2010

Во многих случаях было бы полезно узнать количество строк в таблице (тип) в хранилище данных с помощью Google Application Engine.
Не существует четкого и быстрого решения. По крайней мере, я не нашел один .. Вы?

Ответы [ 3 ]

14 голосов
/ 07 июня 2010

Вы можете эффективно получить счетчик всех сущностей определенного вида (то есть количества строк в таблице), используя Статистика хранилища данных . Простой пример:

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

Более подробный пример того, как получить последние статистические данные здесь (GAE может хранить несколько копий статистики - одну 5 минут назад, одну 30 минут назад и т. Д.).

Обратите внимание, что эта статистика не обновляется постоянно, поэтому она немного отстает от фактических показателей. Если вам действительно нужен фактический счетчик, то вы можете отслеживать его в своей собственной таблице статистики и обновлять ее каждый раз, когда вы создаете / удаляете объект (хотя это будет немного дороже).

Обновление 03-08-2015 : Использование статистики хранилища данных может привести к устареванию результатов. Если это не вариант, еще два метода - это сохранить счетчик или разделить счетчики. ( Подробнее о них можно прочитать здесь ). Только посмотрите на эти 2, если вам нужны результаты в реальном времени.

7 голосов
/ 08 июня 2010

В App Engine нет понятия «Выбрать количество (*)».Вам нужно будет выполнить одно из следующих действий:

  1. Выполнить «только ключи» (обход индекса) необходимых вам объектов во время запроса и сосчитать их по одному.Это приводит к затратам на медленное чтение.
  2. Обновление рассчитывает во время записи - это дает преимущество чрезвычайно быстрого чтения при большей стоимости за запись / обновление.Стоимость: вы должны знать, что вы хотите рассчитывать заранее.Вы платите более высокую стоимость во время записи.
  3. Обновите все счета асинхронно, используя очереди задач, задания cron или новый Mapper API .Это имеет компромисс того, чтобы быть наполовину свежим.
3 голосов
/ 01 марта 2013

Вы можете рассчитывать нет. строк в Google App Engine с использованием com.google.appengine.api.datastore.Query следующим образом:

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