2012-10-13 17 views
0

比方说,我有一种狗的实体在我的数据存储。我想对所有的狗进行简单的操作,但我有很多狗。如何使用查询有效地GoogleAppEngine与Python?

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,但如果我有什么百万狗实体?如何确保在执行操作时不会超时?

回答

3

如果你有很多狗,你想理线的所有实体:

  • 您可以使用地图/减少库。

如果你想自己编程:

  • 您可以使用任务,他们将运行10分钟
  • 您可以使用光标(延长了十几分钟期限)
  • 链任务
  • 你可以使用后端
  • 您可以使用批量操作效率
  • 您可以使用键操作只有效率
  • 你可以使用异步操作效率
  • 您可以使用投影查询效率
+0

我把MapReduce的在建议列表,而不是底部的顶部。 :) –