在appengine上查询响应大小限制?

Appengine文档提到了对实体大小和批量获取请求(db.get())的1Mb限制:http://code.google.com/appengine/docs/python/datastore/overview.html

单个fetch()调用的查询返回的所有实体的总大小是否也有限制?

示例查询:

db.Model.all().fetch(1000)

更新:从1.4.0开始批量获取限制已被删除!

  • 数据存储批量get / put / delete操作的大小和数量限制已被删除。 单个实体仍然限制为1 MB,但是您的应用可能会根据整体数据存储期限允许将多个实体一起批量获取/放入/删除调用。

  • Theres不再限制查询可以返回的实体数量,但是在实际检索/迭代实体时适用相同的实体大小限制。 然而,这只会在一个单一的实体上; 它不是查询返回的所有实体的总大小的限制。

    底线:只要你没有一个大于1Mb的单个实体,你应该可以查询。


    我在生产环境中尝试过,并且确实可以超过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>
    ....
    

    是的,有一个大小限制; 配额和限制部分明确指出db API调用有1兆字节的限制。

    如果批次中实体的大小超过1兆字节,则无法使用db.get(list_of_keys)。 同样,如果批次中实体的总大小超过1兆字节,您将无法进行批处理。

    1,000个实体的限制已被删除,但是(目前)您需要确保批次的总大小不到1兆字节。

    链接地址: http://www.djcxy.com/p/23213.html

    上一篇: Query response size limit on appengine?

    下一篇: Benchmarks for various Google App Engine Datastore operations?