Существует ли SqlFileStream как класс, который работает с Sql Server 2005? - PullRequest
0 голосов
/ 22 января 2010

Для фона к этому вопросу, см «Как сериализовать большой граф объекта .NET в SQL Server BLOB без создания большого буфер? », который теперь имеет большой щедрость на него.

SqlFileStream дает вам значение IoStream , которое находится поверх значения большого двоичного объекта ( varbinary ), которое хранится в базе данных. Однако из-за ограничений на реализацию SqlFileStream он будет работать только с Sql Server 2008.

Логически я не вижу никакой причины, по которой какой-либо API не может быть предоставлен в Sql Server 2000 и Sql Server 2005.

  • Кто-нибудь знает, было ли это сделано?
  • Есть ли где-нибудь реализация с открытым исходным кодом?
  • Чего мне не хватает, думая, что это возможно?

Ответы [ 3 ]

2 голосов
/ 22 января 2010

Я не знаю класса SqlFileStream для чего-либо, кроме SQL Server 2008. Я подозреваю, что это полностью из-за того, что класс SqlFileStream специально разработан для того, чтобы "сидеть на вершине" столбец типа FILESTREAM в SQL Server 2008.

Столбец / тип данных FILESTREAM доступен только в SQL Server 2008 и, по существу, позволяет хранить большие объемы данных в этом столбце. Столбец FILESTREAM на самом деле является столбцом varbinary(max) с модификатором FILESTREAM. По сути, это заставляет SQL Server эффективно обходить подсистему хранения RDBMS и сохранять двоичные данные непосредственно в базовой файловой системе NTFS, поддерживая целостность транзакций для этих данных с точки зрения RDBMS.

Статья MSDN гласит:

Указание атрибута FILESTREAM для столбец varbinary (max) вызывает SQL Сервер для хранения данных в локальном Файловая система NTFS вместо файл базы данных. Операторы Transact-SQL обеспечить возможности манипулирования данными внутри сервера и Win32 файл системные интерфейсы обеспечивают потоковую передачу доступ к данным.

В статье FILESTREAM в SQL Server 2008 В статье MSDN также говорится, что:

API SqlFileStream работает в контекст транзакции SQL Server.

Но также это:

SqlFileStream наследуется от Класс System.IO.Stream, который обеспечивает методы чтения и записи в потоки данных. Чтение из потока передает данные из потока в структура данных, такая как массив байт. Запись передает данные из структура данных в поток.

Предполагая, что внутри SqlFileStream работает так же, как и "болотный стандарт" FileStream класс

Однако, пожалуй, наиболее подробные сведения о том, почему эта функциональность недоступна в предыдущих версиях SQL Server (в которых не реализован тип столбца FILESTREAM или тип «прямой-к-хранилищу»), относятся к Обзор FILESTREAM Статья MSDN, в которой говорится:

FILESTREAM интегрирует SQL Server Database Engine с файлом NTFS система хранения varbinary (макс) двоичные данные больших объектов (BLOB) как файлы в файловой системе. Transact-SQL операторы могут вставлять, обновлять, запрашивать, поиск и резервное копирование данных FILESTREAM. Интерфейсы файловой системы Win32 обеспечивают потоковый доступ к данным.

FILESTREAM использует системный кеш NT для кэширования данных файла. Это помогает уменьшить любой эффект, который данные FILESTREAM может иметь на Database Engine спектакль. Буфер SQL Server бассейн не используется; следовательно, это память доступна для запроса обработка.

В сущности, это говорит о том, что использование объекта SqlFileStream будет действовать почти идентично «стандартному» объекту FileStream, за исключением того, что SQL Server (для целей целостности транзакций) будет действовать как очень легкий «привратник» (или «оболочка») для вашего чтения и запись двоичных данных в базовый файл файловой системы NTFS. Так как ни одна из предыдущих версий SQL Server не предлагала такую ​​функциональность и прямую интеграцию с базовой файловой системой NTFS, я бы сказал, что реализовать SqlFileStream против любых невозможно. версия SQL Server, предшествующая SQL Server 2008. (По крайней мере, не та, которая имеет те же функции «запись в файл, но поддерживает функции целостности транзакций СУБД»).

0 голосов
/ 22 января 2010

Тип данных FILESTREAM был введен в SQL Server 2008 и не имеет эквивалента в SQL Server 2005. Этот тип данных обрабатывается иначе, чем «нормальный» тип большого двоичного объекта. Данные FILESTREAM хранятся отдельно в базе данных в виде файлов, в то время как BLOB-объекты (текстовые или varchar (max) и другие) хранятся непосредственно на страницах данных. Таким образом, вы можете передавать содержимое файлов с помощью SqlFileStream в SQL 2008, но для чтения больших двоичных объектов движок БД должен загрузить их в память сервера и вернуть клиенту в целом. Из-за этого в SQL 2005 невозможно подключить что-либо подобное SqlFileStream непосредственно к столбцу BLOB-объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...