Хранить фотографии в виде файлов или в базе данных для веб-приложения?

Мой вопрос довольно общий, и я знаю, что на него не может быть ответа 100%. Я создаю веб-решение ASP.NET, которое будет включать в себя множество фотографий и, надеюсь, значительный объем трафика. Я действительно хочу добиться производительности.

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

Большое спасибо, Stefan

DUPLICATE : Сохранение изображений в DB – Yea или Nay? , Как сохранить изображения в вашей файловой системе , Хранение небольшого количества изображений: blob или fs? и, возможно, некоторые другие.


КОММЕНТАРИЙ: Спасибо за много хороших ответов. Я пойду на решение, основанное на файлах, даже если мне нравится идея иметь 100% -ное решение для базы данных. Похоже, что сегодня есть хорошие решения для работы с базами данных и т. Д., Но у меня есть несколько причин не делать этого.

  • Я буду на размещенном решении, у меня есть огромное количество хранилища (10 гб), но всего 300 МБ для базы данных. Это будет стоить дорого для дополнительного хранения в БД.

  • Я не эксперт по БД и не контролирую настройки БД. Для решения на базе БД может потребоваться настраиваемая конфигурация.

Если мы перейдем на запуск сайта на нашем собственном сервере, я могу рассмотреть решение на базе БД. спасибо, Стефан

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

Зачем? Потому как…

  1. Вы сможете показывать изображения как статические файлы.
  2. Для получения снимков не требуется доступ к базе данных или код приложения.
  3. Изображения могут быть поданы с другого сервера для повышения производительности.
  4. Это сократит узкое место в базе данных.
  5. В конечном итоге firebase database хранит свои данные в файловой системе.
  6. Изображения можно легко кэшировать, если они хранятся в файловой системе.

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

Преимущество наличия файлов, хранящихся в базе данных, очевидно, что вы не получаете ненужных файлов на жестком диске, если запись удалена, поскольку синхронизация между базой данных (= метаданных) и жестким диском (= файловая память) не встроена и его необходимо запрограммировать вручную.

Используя сегодняшнюю технологию, я предлагаю вам хранить изображения в столбцах FILESTREAM SQL Server 2008 (по крайней мере, это то, что я собираюсь делать с моим следующим проектом), поскольку они сочетают в себе преимущество хранения данных в базе данных и наличия больших двоичных файлов в отдельных файлах (в по крайней мере, согласно рекламе;))

Посвящение всегда было «Файлы в файловой системе, метаданные файлов в базе данных»,

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

При обслуживании impages

Я нашел этот ответ из googling вашего вопроса и прочитал комментарии по адресу http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

Мне обычно нравится иметь двоичные файлы в базе данных, потому что:

  • целостность данных: нет файла без ссылок, нет пути в db без какого-либо связанного с ним файла
  • согласованность данных: взять дамп базы данных, и все. no “O я забыл настроить этот каталог данных.”

Сохранение изображений в базе данных добавляет служебные данные БД для обслуживания одиночных изображений и затрудняет разгрузку в альтернативное хранилище (S3, Akami), если вы достигнете этого уровня. Хранение их в базе данных упрощает перемещение вашего приложения на другой сервер, так как теперь требуется только переместить базу данных.

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

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

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

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

С веб-сайтом, я бы угадал, так как вы задаетесь вопросом, с asp.net, что вы будете идти по пути использования обработчика http для обслуживания изображений. Тогда у вас есть все преимущества рамочной системы в вашем распоряжении, и вы можете сохранить очиститель логики домена, просто передав ключ к своему изображению обработчику http.

Почему бы не выбрать отдельную базу данных NoSql для хранения ваших файлов.

Это приносит вам целостность данных, согласованность данных, как упомянуто @chburd.

Пока вы rdbms по-прежнему остаются маленькими.

  1. Ниже представлен пошаговый пример (общий подход, реализация Spring, Eclipse ) для хранения изображений в файловой системе и хранения их метаданных в БД – http://www.devmanuals.com/tutorials/java/spring/spring3/ MVC / Spring3MVCImageUpload.html
  2. Вот пример: http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. Также вы можете исследовать кодовую базу этого проекта – https://github.com/jdmr/fileUpload . Обратите внимание на этот controller.
  • Какое лучшее место для хранения загруженных изображений, базы данных SQL или файловой системы диска?
  • Есть ли более быстрый способ сканирования через каталог рекурсивно в .NET?
  • Папка, добавленная в android, не видимая через USB
  • Определение даты создания файла в Java
  • Как найти родительский каталог в C #?
  • Рекомендации по созданию и загрузке огромного ZIP (из нескольких BLOB) в WebApp
  • Как вы повторяете каждый каталог / каталог рекурсивно в стандартном C ++?
  • Давайте будем гением компьютера.