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