竟然超出“数据存储小型运营”配额

时间:2013-05-13 12:46:28

标签: python google-app-engine

所以这段代码:

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配额?

获得上述清单的正确方法是什么?

2 个答案:

答案 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=nn中使用count()fetch() =您可以承受的最低限额) 例如,查看是否存在任何记录使用count(limit=1) 索引filter()count()最小。 在大型记录数据库中很容易获得“超出数据存储小操作配额”。始终考虑结果中可能存在多少记录,或者将在内部处理非索引处理:)