Хранение файлов в SQL Server

Это старый вопрос, который я знаю, но с SQL Server 2012 наконец-то нормально хранить файлы в базе данных или они должны храниться в файловой системе только с ссылками на них в базе данных?

Если хранение этих данных в базе данных считается приемлемым в наши дни, каков наиболее эффективный способ сделать это? Я планирую применить шифрование, поэтому я считаю, что обработка не будет молниеносной.

Спасибо

Ответ 1

Там действительно хорошая статья от Microsoft Research под названием В Blob или 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 в файловых группах и поиграйте с ним!

Ответ 2

Там еще нет простого ответа. Это зависит от вашего сценария. У MSDN есть документация, которая поможет вам решить.

Здесь есть другие варианты. Вместо того, чтобы хранить в файловой системе напрямую или в BLOB, вы можете использовать FileStream или таблицу файлов в SQL Server 2012. Преимущества для таблицы файлов выглядят как без проблем (но, по общему признанию, у меня нет личного опыта из первых рук.)

Статья, безусловно, стоит прочитать.

Ответ 3

Вы можете прочитать FILESTREAM. Вот информация из документов, которые помогут вам решить:

Если выполняются следующие условия, вы должны использовать FILESTREAM:

  • Объекты, которые хранятся, в среднем больше 1 МБ.
  • Быстрый доступ для чтения важен.
  • Вы разрабатываете приложения, использующие средний уровень для логики приложения.

Для небольших объектов хранение двоичных (больших) BLOB-данных в базе данных часто обеспечивает лучшую производительность потоковой передачи.