Это хорошая идея использовать файловый поток для хранения изображений и миниатюр? - PullRequest
6 голосов
/ 20 декабря 2011

Мы разрабатываем приложение .NET, которое хранит и ищет большое количество изображений (> 100 000).

Когда мы загружаем изображение, нам нужно создать эскиз и сохранить исходное изображение иминиатюра в БД (SQL Server 2008 R2).

Я читал, что лучший способ хранения изображений - это использование FILESTREAM

http://msdn.microsoft.com/en-us/library/cc949109.aspx

, но когда изображенияменьше, это неэффективно.

Хорошая идея для хранения изображений и миниатюр с использованием файлового потока?Есть лучшая альтернатива?

Ответы [ 2 ]

9 голосов
/ 20 декабря 2011

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

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

  • если ваши изображения или документ обычно имеют размер менее 256 КБ, хранение их в базе данных 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 в файловых группах и поэкспериментируйте с ним!

2 голосов
/ 20 декабря 2011

Собственно правильный ответ - это зависит. Если изображения относительно маленькие - вы можете оставить их в поле varbinary (max).

Почему не FILESTREAM? - Производительность FILESTREAM достигает максимума при больших значениях BLOB - 1Mb +

...