SQL Server 2008 - Хранение файлов - PullRequest
2 голосов
/ 01 апреля 2011

Я создаю веб-приложение MVC3 для базы данных SQL Server 2008. Веб-приложение позволит пользователям загружать фотографии и документы.

В настоящее время файлы хранятся в столбце типа «изображение».

Это нормально, или это устаревший подход?

Есть ли какие-либо преимущества при перемещении хранилища в другой тип данных или при запуске FILESTREAM?

Статистика - 500 (пользователи) x 7 (средние документы каждый) x 2 МБ (средний размер документа)

РЕДАКТИРОВАТЬ 1

Может кто-нибудь прокомментировать; что я сейчас делаю - сохраняю как тип данных "изображение" - плохо?

Ответы [ 5 ]

4 голосов
/ 01 апреля 2011

Вы должны хранить изображения в файловой системе. Смотрите эту ветку: Хранение изображений в БД - да или нет?

Что касается документов, это просто статические файлы, которые пользователь загружает / скачивает, или вы будете искать контент в документах? Вам нужно сделать что-то особенное с документами?

2 голосов
/ 01 апреля 2011

(перемещение моих комментариев к ответу)

С MSDN : ntext , текст и изображение типы данных будут удалены в будущей версии Microsoft SQL Server. Избегайте использования этих типов данных в новых разработках и планируйте модифицировать приложения, которые их используют в настоящее время. Вместо этого используйте nvarchar (max), varchar (max) и varbinary (max).

Это "плохо", если вы заботитесь о запланированном устаревании типа данных. Похоже, varbinary(max) или даже filestream являются предпочтительными типами данных в будущем.

Хранение файлов в базе данных по сравнению с файловой системой - это отдельная дискуссия, на которую, похоже, все остальные нападают.

1 голос
/ 01 апреля 2011

Есть действительно хорошая статья 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 голос
/ 01 апреля 2011

Возможно, вы захотите проверить новый тип данных FILESTREAM в SQL SERVER 2008. Прочитайте ссылку - она ​​даст вам некоторые рекомендации по выбору, является ли этот тип хранилища подходящим.

0 голосов
/ 01 апреля 2011

По моему опыту, лучше хранить ваши файлы на диске и хранить путь к файлу в вашей БД.Это освобождает вашу БД, чтобы сосредоточиться на том, что она должна делать, а не на файловом хранилище.

...