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

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

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

Большое спасибо, Стефан

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


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

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

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

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

Ответ 1

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

Почему? Потому что...

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

При обслуживании помех < img src= к файлу, который уже существует на сервере, скорее всего, будет быстрее, чем создание временного файла из поля базы данных и указание на < img.

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

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

Пока вы rdbms по-прежнему сохраняете небольшие значения.

Ответ 10