Как получить количество строк в таблице в Хранилище данных?

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

7
задан David Underhill 21 July 2010 в 21:21
поделиться

2 ответа

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

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

14
ответ дан 6 December 2019 в 07:25
поделиться

В App Engine нет понятия "Select count(*)". Вам нужно сделать одно из следующих действий:

  1. Выполните "только ключи" (обход индекса) нужных вам сущностей во время запроса и считайте их по одной. Это связано с медленным чтением.
  2. Обновлять подсчеты во время записи - это дает преимущество чрезвычайно быстрого чтения при большей стоимости записи/обновления. Стоимость: вы должны знать, что вы хотите подсчитать заранее. Вы заплатите более высокую стоимость во время записи.
  3. Обновляйте все подсчеты асинхронно, используя очереди задач, задания cron или новый Mapper API. Компромиссом является полусвежесть.
7
ответ дан 6 December 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: