SQL Server: как хранить двоичные данные (например, файл Word)?

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

  • varbinary(n) хранит только 8000 байт.
  • varbinary(max) хранит 2 ГБ
  • BLOB предназначены для больших файлов, но имеют "административные" служебные данные (файлы, на которые ссылаются только в БД, но фактически находятся на локальном жестком диске)

У меня в основном около 1000 документов (в год), которые я хочу хранить в базе данных SQL Server 2008 R2 (заполняется простой загрузкой формы ASPX, просматривается простым Gridview с загрузкой). Все документы, вероятно, будут составлять около 2 МБ - 8 МБ (файлы Word, Excel). Мое предположение заключается в том, что я должен использовать таблицу MyDocuments со следующим расположением:

MyDocuments 
    Data       varbinary(max)
    Title      varchar(255)
    ModifiedOn datetime()
    ModifiedBy varchar(100)

Я на ходу с varbinary(max)? Или я иду в неправильном направлении (например, по производительности)?

Ответы

Ответ 1

В SQL Server 2008 имеется хранилище FILESTREAM. Оно позволяет хранить и эффективно осуществлять доступ к данным BLOB с использованием комбинации SQL Server 2008 и файловой системы NTFS.

Вы можете проверить это:

Хранение FILESTREAM в SQL Server 2008
Сохранение и извлечение файла с помощью FileStream SQL Server 2008

EDIT:
Объекты размером менее 256 КБ лучше всего хранить в базе данных, тогда как объекты размером более 1 М лучше всего сохраняются в файловой системе.

Производительность: Varbinary vs FILESTREAM

http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-FILESTREAM-performance.aspx
В BLOB или не в BLOB: большое хранилище объектов в базе данных или файловой системе
Производительность FILESTREAM SQL Server 2008