Как внедрить этот счетчик запросов в существующий класс? Основная цель - у меня есть модель хранилища данных, содержащая более 3000 записей. Я просто хочу посчитать его общую запись, и нашел это в кулинарной книге движка приложения:
def query_counter (q, cursor=None, limit=500):
if cursor:
q.with_cursor (cursor)
count = q.count (limit=limit)
if count == limit:
return count + query_counter (q, q.cursor (), limit=limit)
return count
Моя существующая модель:
class Members(search.SearchableModel):
group = db.ListProperty(db.Key,default=[])
email = db.EmailProperty()
name = db.TextProperty()
gender = db.StringProperty()
Далее я хочу посчитать членов, которые присоединяются к определенной группе со ссылкой на список. Он также может содержать более 1000 записей.
Кто-нибудь имеет опыт использования query.cursor для этой цели?
Чтобы найти всех членов, вы должны использовать его следующим образом:
num_members = query_counter(Members.all())
Однако вы можете обнаружить, что это работает медленно, потому что оно делает много вызовов хранилища данных.
Более быстрым способом было бы иметь отдельный класс модели (например, MembersCount) и хранить в нем счетчик (т.е. добавлять 1 при создании члена, вычитать 1 при удалении члена).
Если вы часто создаете и удаляете участников, вам может потребоваться создать сегментированный счетчик, чтобы добиться хорошей производительности. Подробнее см. здесь:
http://code.google.com/appengine/articles/sharding_counters. html
Чтобы подсчитать членов в определенной группе, вы можете сделать что-то вроде этого:
group = ...
num_members = query_counter(Members.all().filter('group =', group.key()))
Если вы ожидаете, что в группе будет большое количество членов, вы также можете сделать это более эффективно, используя модель счетчика, которая сегментирована. группой.