У меня есть 1,6 миллиона объектов в приложении Google App Engine, которые я бы хотел скачать. Я попытался использовать встроенный механизм bulkloader, но обнаружил, что он очень медленный. Хотя я могу загружать ~ 30 сущностей в секунду через загрузчик, я могу сделать ~ 500 сущ./Сек, запросив хранилище данных через бэкэнд. Бэкэнд необходим, чтобы обойти 60-секундный предел запроса. Кроме того, запросы хранилища данных могут работать только до 30 секунд, поэтому вам нужно разбить свои выборки по нескольким запросам с помощью курсоров запросов.Массовая загрузка через Google App Engine Backend
код на стороне сервера получает 1000 объектов и возвращает курсор запроса:
cursor = request.get('cursor')
devices = Pushdev.all()
if (cursor and cursor!=''):
devices.with_cursor(cursor)
next1000 = devices.fetch(1000)
for d in next1000:
t = int(time.mktime(d.created.timetuple()))
response.out.write('%s/%s/%d\n'%(d.name,d.alias,t))
response.out.write(devices.cursor())
На стороне клиента, у меня есть цикл, который вызывает обработчик на сервере с нулевым курсором, чтобы начать с а затем начинает передавать курсор, полученный предыдущим вызовом. Он заканчивается, когда он получает пустой результат.
ПРОБЛЕМА: Я могу только получить долю - ~ 20% сущностей, используя этот метод. Я получаю ответ с пустыми данными, хотя полный набор объектов не был пройден. Почему этот метод не получает все всесторонне?
Не могли бы вы ударять свой ежедневный бюджет от чтения опс? – Linuxios
Nope. Это премиум-аккаунт. – er0
Вы по-прежнему устанавливаете ежедневный бюджет того, сколько вы готовы заплатить. – Linuxios