2011-03-31 2 views
2

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

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

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

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

Stats - 500 (пользователей) х 7 (Avg документы каждый) х 2Мб (средний размер док)

EDIT 1

Может

любой комментарий; это то, что я делаю в настоящее время - сохранение типа данных «изображение» - плохо?

+1

Да, тип данных 'IMAGE' устарел с 2005 года - вместо этого используйте' VARBINARY (MAX) '. –

ответ

2

(Moving мои комментарии к ответу)

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

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

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

4

Необходимо сохранить изображения в файловой системе. См. Эту тему: Storing Images in DB - Yea or Nay?

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

+0

ничего особенного, простое старое хранение ... спасибо! –

+0

+1, эта ссылка стоит дать хорошее чтение, чтобы получить за и против –

+0

Я бы сохранил документы на файловой системе, а затем. Особенно, если они являются документами Office с большим количеством метаданных, вы будете использовать дорогостоящее хранилище для каких-либо реальных профессионалов. – mfanto

0

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

1

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

1

Существует действительно хорошая статья от Microsoft Research под названием To Blob or Not To Blob.

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

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

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

  • между этими двумя, это немного жеребьевкой в ​​зависимости от вашего использования

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

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