Счетчик запросов GAE (+1000)

Как внедрить этот счетчик запросов в существующий класс? Основная цель - у меня есть модель хранилища данных, содержащая более 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 для этой цели?

1
задан Ivan Slaughter 30 August 2010 в 19:03
поделиться

1 ответ

Чтобы найти всех членов, вы должны использовать его следующим образом:

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()))

Если вы ожидаете, что в группе будет большое количество членов, вы также можете сделать это более эффективно, используя модель счетчика, которая сегментирована. группой.

2
ответ дан 2 September 2019 в 21:43
поделиться
Другие вопросы по тегам:

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