0

假设我的数据存储中有一个 Dog 类型的实体。我想对所有 Dogs 执行一个简单的操作,但我有很多狗。

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 实体怎么办?如何确保在对它们执行操作时不会超时?

4

1 回答 1

3

如果您有很多狗并且想要处理所有实体:

  • 您可以使用 map/reduce 库。

如果你想自己编程:

  • 您可以使用任务,它们将运行 10 分钟
  • 您可以使用光标链接任务(延长 10 分钟的最后期限)
  • 你可以使用后端
  • 您可以使用批处理操作来提高效率
  • 您可以使用仅关键操作来提高效率
  • 您可以使用异步操作来提高效率
  • 您可以使用投影查询来提高效率
于 2012-10-13T15:26:39.200 回答