所以这段代码:
all_nodes = Nodes.query()
country_nodes = []
for n in all_nodes:
country_nodes.append([n.country, all_nodes.filter(Nodes.country == n.country).count()])甚至还没完成操作就把我的Datastore Small Operations配额都花光了?
获得上述列表的正确方法是什么?
发布于 2013-05-13 21:13:31
在GAE中,当你写一个新的记录时,跟踪每个国家的总数可能会更好。然后,您可以进行一次读取,以找出国家/地区总数。例如,可以添加一个新的模型类型:
class Country(db.Model):
name = db.StringProperty()
count = db.IntegerProperty()然后,当您添加一个新节点时,您可以获得相应的Country记录并递增其count属性。
在您的示例中,当您执行all_nodes.filter(...)时,您将为all_nodes中的每个n运行一个新查询。下面,应该是一种更便宜的计算总数的方法。但当你写新的记录时,它可能比跟踪国家总数的成本更高。
from collections import defaultdict
country_nodes = defaultdict(int)
for n in Nodes.query():
country_nodes[n.country] += 1发布于 2015-01-19 03:13:44
例如,在count()或fetch()中使用limit=n (n=您负担得起的最小值)来查看是否存在任何记录使用count(limit=1)也使用filter() on index来执行count() minimal。在记录的大型数据库中很容易出现“超出数据存储小操作配额”的情况。始终考虑在result中可能有多少记录,或者将在内部进行无索引处理:)
https://stackoverflow.com/questions/16522427
复制相似问题