我在批量投放时偶尔会出现此错误。
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的答案表明,放置的实体数量无关紧要。所以仍然困惑。
答案 0 :(得分:4)
请记住,查找实体大小的快速测试是尝试将其写入memcache。如果超过memcache的1 meg限制,写入将失败,您可以捕获异常。如果你按照尼克的建议去隔离这个问题,可能会有用。
答案 1 :(得分:1)
到目前为止,我使用了StringProperty并遇到了同样的问题,当存储在该属性中的数据最终变得过大时(它只传递了1 MB)。我现在可以使用compressed=True
的JsonProperty修复它。可能是一种选择。
答案 2 :(得分:0)
此批量更新是否在交易中?如果是这样,请记住交易限制为10 MB size