Счетчик запросов GAE (+1000) - PullRequest
1 голос
/ 30 августа 2010

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

2 голосов
/ 31 августа 2010

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

num_members = query_counter(Members.all())

Однако, вы можете обнаружить, что это происходит медленно, потому что это делает много вызовов хранилища данных.

A быстрееможно было бы иметь отдельный класс модели (например, MembersCount) и поддерживать там счетчик (т. е. добавить 1 при создании элемента, вычесть 1 при удалении элемента).

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

http://code.google.com/appengine/articles/sharding_counters.html

КомуДля подсчета участников в определенной группе вы можете сделать что-то вроде этого:

group = ...
num_members = query_counter(Members.all().filter('group =', group.key()))

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

...