2

当我进行批量放置时,我偶尔会收到此错误。

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

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

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

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

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

for entity in entities: entity.put()

但是这个问题的答案表明,放置的实体数量应该无关紧要。所以还是一头雾水。

4

3 回答 3

4

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

于 2012-05-02T16:17:24.117 回答
1

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

于 2015-07-13T10:18:31.217 回答
0

此批更新是否在事务中?如果是这样,请记住事务大小有 10 MB 的限制

于 2012-08-06T19:07:25.257 回答