App Engine批量太大了?

时间:2012-05-02 01:24:45

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

我在批量投放时偶尔会出现此错误。

  

RequestTooLargeError:API调用datastore_v3.Put()的请求太大。

触发此操作的调用会对1000多个实体列表进行db.put调用。每个实体都有一个db.TextProperty字段,大约有20,000个字符。每个实体也有一个父实体,但传递给db.put的列表中没有一个实体共享一个共同的父实体。每个父实体存储大约10个整数,并且不是很大。

我的第一直觉是将传递给db.put的实体数量分开,但是

关于这个原因的任何想法?

修改:拆分实体确实有效。例如,我可以这样做:

for entity in entities: entity.put()

this question的答案表明,放置的实体数量无关紧要。所以仍然困惑。

3 个答案:

答案 0 :(得分:4)

请记住,查找实体大小的快速测试是尝试将其写入memcache。如果超过memcache的1 meg限制,写入将失败,您可以捕获异常。如果你按照尼克的建议去隔离这个问题,可能会有用。

答案 1 :(得分:1)

到目前为止,我使用了StringProperty并遇到了同样的问题,当存储在该属性中的数据最终变得过大时(它只传递了1 MB)。我现在可以使用compressed=True的JsonProperty修复它。可能是一种选择。

答案 2 :(得分:0)

此批量更新是否在交易中?如果是这样,请记住交易限制为10 MB size