Где хранить загруженные файлы (звук, изображения и видео) - PullRequest
4 голосов
/ 09 октября 2008

В то время как мне пришлось разработать музыкальный сайт, который позволял загружать аудиофайлы на сайт и затем конвертировать их в различные форматы с помощью ffmpeg, люди после загрузки загружали загруженные аудиофайлы, а файл tmp быть создан и размещен в месте загрузки и действителен только для каждого экземпляра загрузки, после чего файл tmp будет удален.

Сейчас я пересматриваю проект, я также должен добавить фотографии и видео в качестве загружаемого контента.

Я хочу найти лучший способ хранения файлов,

вариант 1: хранение файлов в папке и ссылки на них в базе данных

вариант 2: сохранение фактического файла в базе данных (mysql) в виде blob.

Я возился с этой идеей, чтобы рассмотреть последствия для безопасности каждого метода и другие проблемы, для которых я, возможно, не рассчитал.

Ответы [ 5 ]

12 голосов
/ 09 октября 2008

Смотрите этот ранее вопрос StackOverflow Хранение изображений в базе данных, да или нет? .

Я знаю, что вы упомянули изображения и видео, однако этот вопрос относится ко всем большим медиафайлам с двоичным содержимым.

Похоже, консенсус заключается в том, что хранение путей к файлам к изображениям в файловой системе, а не фактические изображения, - это путь.

4 голосов
/ 09 октября 2008

Я бы выбрал вариант базы данных. Я использовал его в ряде проектов, в некоторых очень больших 100 + ГБ. Реализация хранилища является ключевой, плохо спроектируйте ее, и ваша производительность будет наказана. См. этот пример для некоторых хороших идей реализации:
Хранение базы данных обеспечивает большую масштабируемость и безопасность.

4 голосов
/ 09 октября 2008

Я бы порекомендовал хранить в виде файлов и сохранять их местоположения в базе данных.

Хранение файлов в базе данных требует больше ресурсов и замедляет резервное копирование / восстановление баз данных. Вы действительно хотите передавать много видео каждый раз, когда делаете дамп базы данных? Файловые системы работают очень хорошо для распаковки файлов, и вы можете легко их создавать / синхронизировать.

3 голосов
/ 09 октября 2008

Я бы пошел для хранения файлов прямо на диске, а база данных содержала только их ID / url.

Таким образом, для доступа к этим файлам (которые могут быть большими, двоичными файлами) не требуется никаких операций php / database, и это делается непосредственно веб-сервером.
Также вам будет проще перенести эти файлы на другой сервер, если вы захотите.

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

1 голос
/ 09 октября 2008

Я задал аналогичный вопрос, используя Oracle в качестве бэкэнда для приложения Windows Forms.

Ответ на самом деле сводится к вашим требованиям для резервного копирования и восстановления файлов. Если это требование важно, используйте базу данных, так как это будет проще (поскольку вы все равно создаете резервную копию базы данных, верно?: O)

...