Производительность Django по обслуживанию статических файлов - PullRequest
0 голосов
/ 07 сентября 2010

Я создаю прототип веб-приложения Django, которое предоставит пользователям статические медиафайлы (PDF-файлы, фильмы и т. Д.).Одна из функций, которые я собираюсь реализовать, - это динамические URL-адреса.Смысл в том, чтобы генерировать разные URL для каждой попытки доступа.Когда пользователь запросит список файлов, я сгенерирую ссылки и сохраню их в БД.При щелчке по некоторым из этих ссылок я верну необходимый контент и очисту ссылки из БД.

Я полагаю, что подача медиа через Django далека от лучших практик.Следует ли этого избежать любой ценой?Кажется ли разумным доступ к этим файлам через приложение, отличное от Django (Perl-скрипт или что-то в этом роде)?

Ответы [ 5 ]

1 голос
/ 07 сентября 2010

Полагаю, что обслуживание СМИ через Джанго далеко от лучших практик.

Правильно.Это не рекомендуется в официальной документации.

Стоит ли этого избегать любой ценой?

ВСЕ расходы?Возможно нет.Если количество запросов и объем обслуживаемых данных (достаточно) достаточно низок, то обработка статических файлов с использованием Django не повлияет на производительность системы.

Представляется ли разумным доступ к этим файлам через приложение, отличное от Django (Perl-скрипт или что-то в этом роде)?

Общий ответ: да.Трудно дать лучший ответ, не зная деталей того, что вы планируете.

0 голосов
/ 07 сентября 2010

Разве вы не можете использовать NGINX, и это безопасный модуль связи?
Потоковая передача файлов с помощью django ... медленная и глупая.
Если вам действительно нужно передавать файлы с помощью python через HTTP, используйте хотя бы Whizzer или Twisted. Это будет иметь достойную производительность. Они оба могут быть легко подключены к ORM Джанго.

0 голосов
/ 07 сентября 2010

Я думаю, что вопрос поставлен неправильно.

Django способен обслуживать статические файлы, но по умолчанию он отключен на производстве, и четко указано, что это только для целей разработки.
Итак, все согласны с тем, что использование django для обслуживания статических файловплохая идея: -)

Однако, как вы выразились, вы не хотите использовать django для обслуживания статических файлов, вы хотите использовать django для реализации некоторой «безопасности» при загрузке файлов.
Насколько я понимаю, файл совсем не статичен;напротив, он определенно динамический!

Я думаю, у вас есть два возможных варианта:

  • Используйте django для разбора URL, а затем перенаправьте на другой сервер (например, nginx) дляобслуживающий файл.Это, безусловно, самый быстрый способ, но он имеет очевидный недостаток: он дает «реальный» адрес файла.
  • Используйте django для разбора URL-адреса, а затем напрямую отправьте PDF-файл.Он полностью реализует ваше первоначальное требование (одноразовые URL-адреса), но повышение производительности может быть довольно сложным.

Я думаю, что второй пункт требует дополнительных подробностей.
Для обслуживания файла требуется некоторое время;использование django для его обслуживания не менее эффективно, чем любой другой метод (большую часть времени тратится на ожидание ввода-вывода), но он может потреблять поток или процесс на вашем сервере.
Если вы планируетеиметь много соединений одновременно, такой подход может иметь серьезные недостатки;с другой стороны, если вам нужно предоставить небольшие файлы ограниченной аудитории, тогда это может быть вполне нормально.

0 голосов
/ 07 сентября 2010

Сам Джанго утверждает, что это неэффективно и небезопасно .Как по мне, django static file serve должен использоваться только в среде разработки.Скорее маленький или большой, он не должен использоваться на производстве ...

Документация о статическая подача django

0 голосов
/ 07 сентября 2010

Используйте django для него только для небольшой разработки, запрещено;) для производства.
Даже команда django предлагает веб-сервер для обслуживания статических файлов .
Вы можете вставлять вишневый, это было бы лучше практиковать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...