擅长:python、mysql、java
<p>由于您使用的是<a href="https://developers.google.com/appengine/docs/python/datastore/modelclass" rel="nofollow noreferrer">db.Model</a>,这里有一种方法可以告诉您如何使用可能超过1000的过滤器来计算所有实体,这是一个硬限制(如果它仍然适用):</p>
<pre><code>FETCH_LIMIT = 1000
def count_model(x=1, y=True, z=3):
model_qry = MyModel.all(keys_only=True)
model_qry.filter('x =', x)
model_qry.filter('y =', y)
model_qry.filter('z =', z)
count = None
total = 0
cursor = None
while count != 0:
if cursor:
count = model_qry.with_cursor(cursor).count()
else:
count = model_qry.count(limit=FETCH_LIMIT)
total += count
cursor = model_qry.cursor()
return total
</code></pre>
<p>如果您要在请求中使用上述方法,那么您可能会超时,所以考虑使用<a href="https://stackoverflow.com/a/11204482/8418">Task Queues</a>。在</p>
<p>同样,正如FoxyLad提议的那样,出于性能原因,最好将totals保存在一个单独的实体中,并将上述方法作为cron作业定期运行,以使统计数据完全同步。在</p>