Форум сайта python.su
для экспорта
например, phpMyAdmin генерирует файлы на лету.
Отредактировано (Июль 14, 2010 16:04:14)
Офлайн
для экспорта данные лучше зажимать архиваторами, для этого нужно целиком данные собрать на диске (что-б память не забивать), а т.к. данные будут на диске то и отдавать веб сервером как статику.
Офлайн
gzip сжимает данные на лету, тогда и файл рядом с вёб-сервисом не понадобится. это первое.
второе, то что файл у меня на самом деле не генерируется, а вытаскивается из сокета и его размер может быть действительно большим (1Gb, например). было бы странно устраивать перекачку с одного сервера на другой и только после этого отдавать пользователю ссылку. по крайней мере это займёт время, пользователь может просто не дождаться начала скачивания.
третье - файл не должен отдаваться как статика, т.к. должен быть доступен только авторизованному пользователю. и при отмене скачивания, ситуация должна быть корректно обработана и скрипт должен передать соответствующее сообщение серверу, с которого идёт скачивание.
может быть, я и не привёл ни одной достаточной для вас причины, но генерация файлов на лету должна быть, не с пустого места её придумали. отмечу, что ни в mod_python, ни в php никаких проблем с этим нет.
Офлайн
axeЛегко. По спецификации приложение должно возвращать питоновский генератор - http://www.python.org/dev/peps/pep-0333/#the-application-framework-side (см. AppClass). Так что выдавать по частям вполне можно.
Можно ли под wsgi генерировать файлы? Т.е. сгенерировал заголовок файла - отдал, потом генерировать поток данных и отдавать его.
Офлайн
а как же обрывы и докачка?
вообще это не веб задача, но http для перекачки архивов подойдет.
Офлайн
При экспорте данных нельзя делать докачку, т.к. между обращениями данные могли поменяться.
Офлайн
с временным файлом докачка была бы.
пока клиент скачивает 2 часа, данные тоже могут поменяться.
вообщем тут уже реализация от цели зависит. задача специфическая.
Офлайн
o7412369815963Абсолютно согласен. Лично я бы серьезно расмотрел сохранение файлов на серваке (снижение нагрузки на сервер) и небольшое колдунство с X-Accel-Redirect (для проверки авторизации и отдачи ссылки на файл только проверенным пользователям). Правда пришлось бы по крону потом место чистить время от времени.
вообще это не веб задача, но http для перекачки архивов подойдет.
Офлайн
ziroможно штатными средствами вебсерверов, у апача например файл .htaccess сделать.o7412369815963небольшое колдунство с X-Accel-Redirect (для проверки авторизации и отдачи ссылки на файл только проверенным пользователям)
вообще это не веб задача, но http для перекачки архивов подойдет.
Офлайн
o7412369815963Не могут. Запрос для экспорта выполяется 1 раз, и результат сохраняется во временное хранилище внутри базы данных. Такое хранение обеспечивает сама СУБД (тот же MySQL). А дальше уже идёт скачивание информации из этого хранилища. Если скачивание оборвалось, то данные стираются, потому что нет смысла их хранить. Запрос выполянется секунды, а скачивание действительно может идти часами.
пока клиент скачивает 2 часа, данные тоже могут поменяться
Офлайн