如何使用Python在GoogleAppEngine中有效地使用查询?

时间:2012-10-13 15:08:51

标签: google-app-engine google-cloud-datastore

假设我的数据存储区中有一个善良的Dog实体。我想对所有狗进行简单的操作,但我有很多狗。

all_dogs = Dog.all(keys_only=True)
print dogs.count(100000) #returns 79234, or some equally large number

如果我这样做:

for dog_key in all_dogs:
    k = dog_key

我理解的与以下相同:

for dog_key in all_dogs.run(batch_size=20):
    k = dog_key

然后我会得到一个像这样的数据存储超时异常:

Timeout: The datastore operation timed out, or the data was temporarily unavailable.

如果我将batch_size增加到1000,那么我就没有问题了。

导致操作计时器启动的原因以及超时需要多长时间?我怎样才能确保我没有超时?

在这种情况下,增加batch_size会有所帮助,但是如果我拥有数百万个Dog实体呢?如何确保在对它们执行操作时不会出现超时?

1 个答案:

答案 0 :(得分:3)

如果你有很多狗,你想要处理所有实体:

  • 您可以使用map / reduce库。

如果你想自己编程:

  • 你可以使用任务,它们将运行10分钟
  • 您可以使用游标链接任务(延长10分钟的截止日期)
  • 您可以使用后端
  • 您可以使用批处理操作来提高效率
  • 您可以使用仅限关键操作来提高效率
  • 您可以使用异步操作来提高效率
  • 您可以使用投影查询提高效率