Какой лучший способ хранения изображений-папка или SQL Server в двоичном формате?

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

любой совет был бы очень признателен!

спасибо, Тристан!--1-->

5 ответов


недостатком хранения в двоичном формате является то, что вы раздуваете размер базы данных до невероятных размеров. Если бы вы использовали экспресс-версию SQL Server, которая ограничена 4 ГБ на базу данных, вы бы "закончили" фотогалерею довольно скоро.

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


SQL Server 2008 поддерживает FILESTREAM хранения.

файлы хранятся на NTFS объем, как простые файлы, но подлежат контролю транзакций и могут быть доступны через специальные имена файлов, переданные Win32 API функции (и, конечно, любой API построенный на нем) с дополнительным SQL Server проверки безопасности (например,GRANT опции и т. д.).


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


У нас было большое приложение LOB, которое предоставило банковским кассирам идентификационную информацию о члене, стоящем перед ними. Наши текстовые данные хранились в SQL Server. Данные изображения хранились в файлах. Поле базы данных просто имело имя файла. Этот подход хорошо работает, если вы находитесь за брандмауэром. Чтение и запись файлов легко. Проблема в управлении файлами. Вы должны защитить файловую систему, чтобы случайные люди не могли просматривать каталог. Кроме того, резервные копии больше сложно с файлами изображений. Необходимо создать резервную копию базы данных и файлов изображений. Поля могут ссылаться на пути, которые больше не существуют. Например, какой-то ИТ-чувак решает переместить папку с изображением, и теперь все ссылки в БД сломаны. Если ваше приложение должно передавать информацию через брандмауэр, я бы предложил хранить изображения в SQL Server с помощью упомянутого хранилища FileStream.

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


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

но, как вы упомянули SQLExpress, вероятно, самым важным фактором является максимальный размер базы данных, и это очень хорошо причина перейти к подходу файловой системы. Во всяком случае, эта исследовательская работа все еще может быть вам интересна: в BLOB или не блоб: Хранение больших объектов в базе данных или файловой системе?

эта статья раньше была на исследовательском сайте Microsoft здесь:http://research.microsoft.com/apps/pubs/default.aspx?id=64525, но эта ссылка не работает для меня. С тех пор SQL Server прошел долгий путь. Например, квасной уже упоминал FILSTREAM.