В то время как мне пришлось разработать музыкальный сайт, который позволял загружать аудиофайлы на сайт, а затем преобразовывался в различные форматы с использованием ffmpeg, люди затем загружали загруженные аудиофайлы после их покупки и создавали файл tmp и размещенный в месте загрузки и действительный только для каждого экземпляра загрузки, и затем файл tmp будет удален.
Теперь я пересматриваю проект, мне приходится добавлять картинки и видео в качестве загружаемого контента.
Я хочу найти лучший способ для хранения файлов,
вариант 1: сохранение файлов в папке и их ссылка в базе данных
вариант 2: сохранение фактического файла в базе данных (mysql) как blob.
Я размышляю над этой идеей, чтобы рассмотреть последствия для безопасности каждого метода и другие проблемы, которые я, возможно, не рассчитал.
См. Этот ранее вопрос StackOverflow Сохранение изображений в базе данных, да или нет? ,
Я знаю, что вы упомянули изображения и видео, однако этот вопрос имеет отношение ко всем файлам большого двоичного содержимого.
Консенсус, похоже, заключается в том, что сохранение путей к изображениям в файловой системе, а не к фактическим изображениям.
Я бы рекомендовал хранить в виде файлов и хранить их местоположения в базе данных.
Для хранения файлов в базе данных требуется больше ресурсов и медленная резервная копия / восстановление баз данных. Вы действительно хотите передавать много видео каждый раз, когда вы делаете дамп базы данных? Файловые системы очень хорошо работают для вывода файлов, и вы можете легко их синхронизировать или синхронизировать.
Я бы выбрал вариант базы данных. Я использовал его в ряде проектов, а некоторые из них были более крупными 100 + ГБ. Реализация хранилища является ключевой, плохо ее проектируйте, и ваша производительность будет наказываться. См. Этот пример для некоторых хороших идей реализации:
Хранилище баз данных обеспечивает большую масштабируемость и безопасность.
Я бы хотел хранить файлы непосредственно на диске, а база данных содержала только их ID / url.
Таким образом, доступ к этим файлам (которые могут быть большими, двоичными файлами) не требует какой-либо операции php / database, и это делается веб-сервером напрямую.
Также будет легче перемещать эти файлы на другой сервер, если захотите.
На самом деле только один потенциал роста, который я вижу в хранилище в базе данных, – это просто резервное копирование – вы все равно хотите создать резервную копию своей базы данных, таким образом, вы будете иметь все данные в одном месте, и вы можете быть уверены, что каждая резервная копия заполнена (т.е. t есть файлы на диске, которые не используются в записях базы данных, и у вас нет идентификаторов изображений в вашей базе данных, которые указывают на никуда)
Я задал аналогичный вопрос, используя Oracle в качестве бэкэнд для приложения Windows Forms.
Ответ действительно сводится к вашим требованиям для резервного копирования и восстановления файлов. Если это требование важно, используйте базу данных, так как это будет проще (поскольку вы все равно создаете резервную копию базы данных?): O)