2011-03-06 2 views
0

Я работаю над веб-приложением Python, которому необходимо импортировать большие (с точки зрения ограничений GAE) gzipped файлы с стороннего сайта на регулярной основе. Подумайте о том, как rdf экспортирует проект DMOZ, производящий регулярные промежутки времени.GAE: запланированный импорт большого gzip-файла с сайта третьей стороны

Это означает ежедневную выборку файла gzip размером 500+ МБ, ругание, разбор, обработку и сохранение результатов в хранилище данных GAE для последующего использования.

Каков правильный способ реализации этой функции в GAE, имея в виду пределы максимальной загрузки, времени обработки и т. Д.?

ответ

1

Ограничение на размер загружаемого файла в App Engine в настоящее время составляет 64 МБ. В результате у вас есть два варианта:

  • Используйте заголовки диапазона HTTP для загрузки и обработки файла в кусках.
  • Используйте внешнюю службу, чтобы выполнить загрузку, разделить ее на куски и отправить части в приложение App Engine.
+0

Вы не можете разобрать gzip в кусках, к сожалению. Он имеет заголовок, и вы не можете начать его чтение в середине потока. Контраст с bzip2, который является блочно-ориентированным. –

+0

@Spike Кто сказал что-нибудь про чтение его в кусках? Вы можете прочитать его как поток; просто забирайте больше данных в буфер каждый раз, когда вы закончите. –

+0

Позвольте мне посмотреть, понимаю ли я. Ваше предложение состоит в том, чтобы запланировать задание cron, которое будет выполнять задачу, которая должна загружать кусок gz-файла куском (chunksize <пределы размера urlfetch) как поток, gunzip поток, разбор и хранение. И задача должна закончиться в течение 10 минут. Это правильно? BTW: В соответствии с [документацией] (http://code.google.com/appengine/docs/python/urlfetch/overview.html#Quotas_and_Limits) максимальный размер ответа для извлечения URL-адреса составляет 32 мегабайта. Где вы видели 64MB? –

0

Моя первоначальная реакция (не зная, что находится внутри файла gzipped), должна выполнить обработку где-нибудь еще (AWS?), А затем перетащить обработанные данные в ваше приложение GAE небольшими битами.

+0

Да, я думал об этих решениях, но стараюсь избегать системного администрирования. В противном случае я мог бы легко создать все приложение на более обычной платформе облачных вычислений, например AWS. IMHO GAE лучше, чем AWS. Но AWS лучше GAE + AWS :) –

Смежные вопросы