【问题标题】:Query response size limit on appengine?appengine 上的查询响应大小限制?
【发布时间】:2010-11-10 01:35:38
【问题描述】:

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

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

查询示例:

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

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

  • 数据存储批量获取/放置/删除操作的大小和数量限制 被移除。单个实体仍限制为 1 MB,但您的应用 可能 将尽可能多的实体批处理到一起进行 get/put/delete 调用 数据存储期限将允许。

【问题讨论】:

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


    【解决方案1】:

    查询可以返回的实体数量有no longer a limit,但是当您实际检索/迭代实体时,同样的实体大小限制适用。不过,这一次只能在一个实体上;它不是对查询返回的所有实体的总大小的限制。

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

    【讨论】:

    • 谢谢卡尔。您是否碰巧知道查询的实体总大小的大小限制(例如,对于单个 fetch())?
    • 我认为没有;我认为唯一的限制是如果您尝试迭代具有一百万个结果的查询的结果,您将遇到的整个请求的超时。
    【解决方案2】:

    我在生产环境中尝试过,您的查询总容量确实可以超过 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>
    ....
    

    【讨论】:

      【解决方案3】:

      是的,有大小限制; quotas and limits 部分明确声明 db API 调用有 1 兆字节的限制。

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

      已取消 1,000 个实体的限制,但(目前)您需要自己确保批次的总大小小于 1 兆字节。

      【讨论】:

      • 虽然您的信息是正确的,但我应该澄清一下,问题是关于 queries 的限制,而不是批量获取。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多