Ограничение размера ответа на запрос на appengine? - PullRequest
5 голосов
/ 10 ноября 2010

В документах Appengine упоминается ограничение в 1 МБ как для размера объекта, так и для запросов на пакетное получение (db.get ()): http://code.google.com/appengine/docs/python/datastore/overview.html

Существует ли ограничение на общий размер всех объектов, возвращаемых запросомдля одного вызова fetch ()?

Пример запроса:

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

Обновление: Начиная с версии 1.4.0 ограничения на получение пакета были удалены!

  • Размери количественные ограничения на операции получения / установки / удаления партии хранилища данных были удалены.Размер отдельных сущностей по-прежнему ограничен 1 МБ, но ваше приложение может объединять столько сущностей для вызовов get / put / delete, сколько позволяет общий срок хранения данных.

Ответы [ 3 ]

6 голосов
/ 10 ноября 2010

Theres больше не ограничивает количество сущностей, которые могут быть возвращены запросом, но тот же предел размера сущности применяется, когда вы фактически извлекаете / перебираете сущности.Это будет только на одном объекте одновременно;это не ограничение на общий размер всех объектов, возвращаемых запросом.

Итог: до тех пор, пока у вас нет ни одной сущности размером> 1 МБ, вы должны быть в порядке с запросами.

3 голосов
/ 10 ноября 2010

Я опробовал его на производстве, и вы действительно можете превысить общий объем 1 Мб для запроса. Я прекратил тестирование с общим размером ответа около 20 Мб.

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 голосов
/ 10 ноября 2010

Да, есть ограничение по размеру; в разделе о квотах и ​​ограничениях прямо указано, что для вызовов API дБ существует ограничение в 1 мегабайт.

Вы не сможете выполнить db.get (list_of_keys), если размер total сущностей в пакете превышает 1 мегабайт. Аналогично, вы не сможете поставить пакет, если общий размер сущностей в пакете превышает 1 мегабайт.

Ограничение в 1000 единиц было удалено, но (в настоящее время) вам необходимо убедиться, что общий размер ваших пакетов составляет менее 1 мегабайта.

...