2010-06-07 3 views

ответ

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). Только посмотрите на эти 2, если вам нужны результаты в реальном времени.

7

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

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

+1 Это все большие альтернативы, которые могли бы быть более уместно, что статистические данные хранилища данных API в зависимости от потребностей вашего заявление. –

3

Вы можете сосчитать нет. строк в 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()); 
Смежные вопросы