Обслуживание больших сгенерированных файлов с помощью Google App Engine?
-
12-10-2019 - |
Вопрос
В настоящее время у меня есть приложение GAE, которое выполняет некоторую автономную обработку (поддерживает данные пользователя) и генерирует файл, который находится где -то в окрестностях 10 - 100 МБ. Я не уверен в лучшем способе обслуживания этого файла пользователю. Два варианта, которые я рассматриваю, являются:
Добавление кода в код обработки в автономном режиме, который «подделывает» его как загрузку формы в хранилище Blob, и пройдя обычный процесс Blobstore, чтобы обслуживать файл.
Наличие автономного кода обработки хранит файл где -то вне GAE и обслуживание его оттуда.
Есть ли гораздо лучший подход, который я упускаю? Я предполагаю, что это функциональность, которая не очень хорошо подходит для GAE. Я думал о хранении в данных данных как DB.Text или Dd.blob, но там я сталкиваюсь с пределом 1 МБ.
Любой вклад будет оценен,
Решение
Я думаю, что хранение его в BlobStore через форму для формы-ваш лучший в настоящее время доступный вариант. У нас есть планы по реализации программного написания Blobstore, но это еще не готово.
Другие советы
Мы должны упомянуть, что с некоторое время назад вы можете использовать экспериментальную фети написать файлы.
Тогда вы можете обслуживать файл в качестве загрузки с помощью хорошего Blobstordownownloadhandler
Я бы придерживался первого варианта. Подготовка Blob потребует некоторого дополнительного кодирования, но API Blobstore позволяет обслуживать байтовые диапазоны файла:
http://code.google.com/appengine/docs/python/blobstore/overview.html#serving_a_blob
Вам не нужно будет реализовать служебные куски сами.
Есть какой -то подход, который вы упускаете из виду, хотя я не уверен, намного ли это намного лучше:
Разделите данные на множество кусков 1 МБ и имеют отдельные запросы на передачу кусков.
Это потребует сотрудничества от внешних приложений, чтобы фактически извлечь данные в кусочках; Возможно, вы захотите использовать заголовок HTTP -диапазона для поддержания иллюзии одного файла. Затем есть другой объект, который сохраняет идентификаторы всех отдельных кусков.