如何将此查询计数器实现到现有类中?主要目的是我拥有超过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的经验吗?
答案 0 :(得分:2)
要查找所有成员,您可以像这样使用它:
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()))
如果您希望组中有大量成员,您还可以使用由该组进行分片的计数器模型来更有效地执行此操作。