Хранение изображений в SQL Server?
Я сделал небольшой демонстрационный сайт и на нем я храню изображения в столбце изображения на sql server. У меня есть несколько вопросов...
Это плохая идея?
Это будет влиять на производительность на моем сайте, когда он растет?
альтернативой было бы хранить изображение на диске и хранить только ссылку на изображение в базе данных. Это должно быть общая дилемма, которая была у многих людей. Я был бы рад немного совет и на самом деле был бы счастлив сделать меньше ошибок, если бы мог.
6 ответов:
есть действительно хорошая статья Microsoft Research под названием к Blob или не к Blob.
их вывод после большого количества тестов производительности и анализа это:
Если ваши фотографии или документ, как правило, меньше 256K в размере, хранение их в базе данных VARBINARY столбец является более эффективным
Если ваши фотографии или документ обычно имеют размер более 1 МБ, их хранение в файловой системе больше эффективный (и с атрибутом FILESTREAM SQL Server 2008 они все еще находятся под транзакционным контролем и частью базы данных)
между этими двумя, это немного жеребьевка в зависимости от вашего использования
Если вы решили поместить свои фотографии в таблицу SQL Server, я настоятельно рекомендую использовать отдельную таблицу для хранения этих фотографий - не храните фотографию сотрудника в таблице сотрудников - храните их в отдельной таблице. Что таким образом, таблица сотрудников может оставаться скудной и средней и очень эффективной, предполагая, что вам не всегда нужно выбирать фотографию сотрудника тоже в рамках ваших запросов.
для файловых групп, проверить архитектура файлов и файловых групп для интро. В принципе, вы либо создадите свою базу данных с отдельной файловой группой для больших структур данных с самого начала, либо добавите дополнительную файловую группу позже. Назовем его "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 в файловые группы и поиграйте с ним!
Я попал в эту дилемму один раз, и исследовал довольно много на google для мнений. Я обнаружил, что действительно многие видят сохранение изображений на диск лучше для больших изображений, в то время как mySQL обеспечивает более легкий доступ, особенно из таких языков, как PHP.
Я нашел аналогичный вопрос
MySQL BLOB vs File для хранения небольших изображений PNG?
мой окончательный вердикт заключался в том, что для таких вещей, как изображение профиля, просто небольшое квадратное изображение, которое нужно будьте там для каждого пользователя, mySQL будет лучше, чем хранить кучу больших пальцев на жестком диске, в то время как для фотоальбомов и тому подобных вещей папки/файлы изображений лучше.
надеюсь, это поможет
Я бы предпочел сохранить изображение в каталоге, а затем Сохранить ссылку на файл изображения в базе данных.
однако, если вы сохраняете изображение в базе данных, вы должны разбить свою базу данных так, чтобы столбец изображения находился в отдельном файле.
вы можете прочитать больше об использовании файловых групп здесь http://msdn.microsoft.com/en-us/library/ms179316.aspx.
почему это может быть хорошо, чтобы хранить фотографии в базе данных отсутствуют в каталоге на веб-сервере.
вы сделали приложение с большим количеством фотографий, хранящихся в папке на сервере, что клиент использовал в течение многих лет.
теперь они приходят к вам. Они сервер был уничтожен, и они должны восстановить его на новом сервере. У них больше нет доступа к старому серверу. Единственная резервная копия у них есть резервная копия базы данных.
У вас есть конечно, источник и может просто развернуть его на новом сервере, установить SqlServer и восстановить базу данных. Но теперь все фотографии исчезли.
Если вы сохранили фотографии в SqlServer все будет работать, как и раньше.
только мои 2 цента.
при хранении изображений в SQL Server Не используйте тип данных 'image', по словам MS, он постепенно выводится в новых версиях SQL server. Используйте varbinary (max) вместо
еще один вариант был выпущен в 2012 году под названием File tables:https://msdn.microsoft.com/en-us/library/ff929144.aspx
Comments