所以这段代码:
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
配额?
获得上述清单的正确方法是什么?
答案 0 :(得分:1)
在GAE中,当您撰写新记录时,最好跟踪每个国家/地区的总数。然后,您可以通过一次阅读来查找国家总数。例如,您可以添加新的模型类型:
class Country(db.Model):
name = db.StringProperty()
count = db.IntegerProperty()
然后,当您添加新节点时,您可以获取相应的Country
记录并增加其count
属性。
在您的示例中,当您执行all_nodes.filter(...)
时,您正在为n
中的每个all_nodes
运行新查询。以下,应该是一种更便宜的计算总数的方法。但是,当您撰写新记录时,它可能比追踪国家总数更贵。
from collections import defaultdict
country_nodes = defaultdict(int)
for n in Nodes.query():
country_nodes[n.country] += 1
答案 1 :(得分:0)
在limit=n
或n
中使用count()
(fetch()
=您可以承受的最低限额)
例如,查看是否存在任何记录使用count(limit=1)
索引filter()
也count()
最小。
在大型记录数据库中很容易获得“超出数据存储小操作配额”。始终考虑结果中可能存在多少记录,或者将在内部处理非索引处理:)