C #: сохранение изображения в БД

#c# #database #image #image-processing #varbinarymax

#c# #База данных #изображение #обработка изображений #varbinarymax

Вопрос:

Может кто-нибудь дать мне несколько советов о том, как сохранить файл изображения в БД на C #? Я буду сохранять много изображений, так каков наилучший способ уменьшить пространство, которое ему потребуется? В настоящее время я использую поле varbinary (max) в БД.

Спасибо!

Комментарии:

1. Используя какой тип связи с БД? (Возможно, Linq2SQL, Linq2Entity)

2. Как вы обычно сохраняете данные на вашем sql Server?

Ответ №1:

Если вам НЕОБХОДИМО сохранить фактический файл в SQL, то обязательно установите некоторые ограничения на размер изображения и убедитесь, что вы правильно спланировали размер базы данных — сколько изображений и какого размера вы ожидаете?

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

ТЕПЕРЬ, если вам не нужно хранить изображения в базе данных SQL, то я думаю, что это просто требует использования хранилища больших двоичных объектов Azure. Взгляните на это — это даст вам то, что вы хотите, в очень эффективной системе.

Если вы не можете использовать Azure, вам следует создать класс, который будет обрабатывать чтение / запись / поиск изображений в файловой системе. Сохранение в файловой системе (выполненное должным образом) будет работать намного лучше, чем сохранение в SQL.

Ответ №2:

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

Я думаю, есть много способов, которыми вы могли бы справиться с этим. Просто взвесьте все за и против.

Я только что дал вам одну альтернативу.

Ответ №3:

Не очень хорошая идея хранить изображения в базе данных. Вы можете сохранять URL-адреса к изображениям.

Комментарии:

1. ты печатаешь быстрее меня. да, послушайте этого парня.

2. Можно использовать Filestream тип вместо varbinary(max)

Ответ №4:

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

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

http://www.codeproject.com/KB/aspnet/ImageInDatabase.aspx

Ответ №5:

Как сказал Магнус, потоки файлов не хранятся на страницах БД, поэтому это не влияет на производительность.

Хотя хранение файлов в БД означает, что ваши резервные копии БД станут НАМНОГО больше.

Кто-то еще упомянул о сохранении только URL-адресов. Это также отличная идея и, вероятно, наиболее подходящая для простой настройки.