Appengine docs提到了对实体大小和批量获取请求(db.get())的1Mb限制: http://code.google.com/appengine/docs/python/datastore/overview.html
对于单个fetch()调用,查询返回的所有实体的总大小是否也有限制?
示例查询:
db.Model.all().fetch(1000)
更新:从1.4.0开始,批量获取限制已被删除!
答案 0 :(得分:6)
Theres no longer a limit关于查询可以返回的实体数量,但是当您实际检索/迭代实体时,适用相同的实体大小限制。这只会一次只在一个实体上;它不是对查询返回的所有实体的总大小的限制。
底线:只要您没有单个实体> 1Mb你应该对查询没问题。
答案 1 :(得分:3)
我在生产中尝试过,你的查询确实可以超过1 Mb。我停止测试的总响应大小约为20 Mb。
from app import models
# generate 1Mb string
a = 'a'
while len(a) < 1000000:
a += 'a'
# text is a db.TextProperty()
c = models.Comment(text=a)
c.put()
for c in models.Comment.all().fetch(100):
print c
输出:
<app.models.Comment object at 0xa98f8a68a482e9f8>
<app.models.Comment object at 0xa98f8a68a482e9b8>
<app.models.Comment object at 0xa98f8a68a482ea78>
<app.models.Comment object at 0xa98f8a68a482ea38>
....
答案 2 :(得分:2)
是的,有尺寸限制; quotas and limits部分明确声明db API调用有1兆字节的限制。
如果批次中实体的总大小超过1兆字节,您将无法使用db.get(list_of_keys)。同样,如果批次中实体的总大小超过1兆字节,您将无法放置批次。
已删除1,000个实体限制,但(目前)您需要确保批次的总大小不超过1兆字节。