Работа с изображениями в WCF - PullRequest
2 голосов
/ 18 марта 2010

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

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

Если вы сделали что-то подобное, пожалуйста, напишите, что вы думаете по этому вопросу.

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

Спасибо.

Ответы [ 2 ]

5 голосов
/ 18 марта 2010

Есть действительно хорошая статья Microsoft Research под названием Для блобов или не для блобов .

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

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

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

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

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

Для файловых групп ознакомьтесь с 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 в файловых группах и поэкспериментируйте с ним!

1 голос
/ 18 марта 2010

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

Если это не вариант, вы можете создать отдельную файловую группу для данных изображения (чтобы обеспечить максимальную гибкость при разбиении данных) и использовать типы данных varbinary (max) или image.

Гуру SQL, вероятно, поделится лучшей информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...