Хранение изображений в SQL Server?

Я сделал небольшой демонстрационный сайт и на нем храню изображения в столбце изображения на сервере sql. Несколько вопросов, которые у меня есть...

  • Это плохая идея?

  • Будет ли это влиять на производительность моего сайта при его росте?

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

4b9b3361

Там действительно хорошая статья от Microsoft Research под названием В Blob или Not To Blob.

Их заключение после большого количества тестов производительности и анализа таково:

  • если ваши изображения или документы обычно имеют размер ниже 256 КБ, их хранение в базе данных VARBINARY более эффективен

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

  • между этими двумя, это немного зависит от вашего использования

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

Для файловых групп ознакомьтесь с Files and Filegroup Architecture для входа. В принципе, вы либо создадите свою базу данных с отдельной файловой группой для больших структур данных с самого начала, либо добавите дополнительную файловую группу позже. Позвольте называть его "LARGE_DATA".

Теперь, когда у вас есть новая таблица для создания, которая должна хранить столбцы VARCHAR (MAX) или VARBINARY (MAX), вы можете указать эту группу файлов для больших данных:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

Ознакомьтесь с вводом MSDN в файловых группах и поиграйте с ним!

184
ответ дан 10 апр. '11 в 21:44
источник

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

Я нашел аналогичный вопрос

MySQL BLOB и файл для хранения небольших изображений PNG?

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

Надеюсь, что это поможет

10
ответ дан 10 апр. '11 в 21:46
источник

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

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

Подробнее об использовании файловых групп читайте здесь http://msdn.microsoft.com/en-us/library/ms179316.aspx.

10
ответ дан 10 апр. '11 в 21:44
источник

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

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

Теперь они приходят к вам. Они были уничтожены, и их необходимо восстановить на новом сервере. У них больше нет доступа к старому серверу. Единственная резервная копия, которую они имеют, - это резервная копия базы данных.

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

Если вы сохранили фотографии в SqlServer, все будет работать по-прежнему.

Только мои 2 цента.

5
ответ дан 13 янв. '16 в 14:32
источник