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

Я создаю приложение asp.net mvc, где пользователи могут прикреплять изображение к своему профилю, но также и в других областях системы, таких как гаджет обмена сообщениями на панели инструментов, который отображает последние сообщения и т. Д.

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

Преимущества базы данных

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

когда я позже создаю веб-сервисы, они могут просто извлекать все связанные с профилем данные из одного места (базы данных)

Преимущества файловой системы

загрузка файлов с диска, вероятно, быстрее

какие-то другие преимущества?

Где другие сайты хранят такую ​​информацию. Правильно ли я немного обеспокоен производительностью базы данных для чего-то подобного?

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

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

Инфраструктура в вопросе

Веб-сайт будет развернут в IIS на Windows Server 2003 с файловой системой NTFS.База данных будет SQL Server 2008

Резюме

Читая о многих связанных темах здесь, на SO, многие люди сейчас склоняются к типу файлового потока SQL Server. Однако из того, что я мог бы извлечь (я могу ошибаться), нет особой пользы, когда файлы довольно маленькие. Однако потоковая передача файлов значительно повышает производительность, когда файлы имеют размер несколько МБ или больше.

Поскольку мои изображения в профиле обычно занимают около 5 КБ, я решил оставить их в хранилище файлов в базе данных как varbinary (max).

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

Так что я думаю, что я пошел на гибрид;

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

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

Ответы на вопрос(2)

Ваш ответ на вопрос