Хранить изображения в базе данных или в файлах со ссылкой на базу данных?


22

Уместно ли хранить файлы изображений в базе данных? Или было бы лучше хранить только путь к файлу в базе данных, сохраняя сам файл на сервере?

Есть ли другие способы сделать это правильно?

Ответы:


22

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

Хранение изображений в базе данных имеет несколько недостатков:

  • База данных может стать неожиданно большой. Иногда пространство является проблемой. Например, с SQLServer Express у вас есть ограничение в 4 ГБ.

  • Миграция данных может стать проблемой, например, если вы переключаетесь с SQLServer на Oracle

  • Запросы могут стать очень медленными, и вы будете иметь высокую нагрузку на базу данных

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

  • Хуже производительность в целом

  • Вам, вероятно, все равно придется создавать временные файлы при извлечении изображений из базы данных. Это не нужно.

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


11

Исследование SQL Server 2005 и файловой системы NTFS (Microsoft) для сравнения производительности CRUD: с BLOB или без BLOB . Это исследование также было сделано в веб-приложении. Вы перечислили другую базу данных (MySQL), и я предполагаю, что вы не используете Windows Server для своего сайта PHP, поэтому было бы интересно, если бы кто-то провел аналогичное исследование по различным технологиям.

Оказывается, это зависит от размера файлов. SQL Server поддерживает (в два раза лучше) большие двоичные объекты размером 256 КБ и меньше, а файловая система предпочитает файлы размером более 1 МБ. В этом исследовании файловые системы обрабатывают фрагментацию лучше, чем базы данных, поэтому, если вы постоянно обновляете эти файлы или эта система со временем растет, фрагментация станет более важным фактором, чем файловая система будет работать лучше.

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

При проектировании следует учитывать репликацию, резервное копирование, аварийное восстановление, фрагментацию, оставшуюся емкость диска и производительность с течением времени. Это всего лишь одно исследование предыдущей версии SQL Server, и, как и другие производители баз данных, я предполагаю, что обработка больших файлов и двоичных файлов - это главная конкурентная арена.


Возможно, вы также захотите рассмотреть интегрированные решения. Например, на SQL Server есть FILESTREAM и Удаленное хранилище BLOB-объектов .
Фернандо Коррея

4

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.