FILESTREAM (SQL Server)FILESTREAM (SQL Server)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server (только в Windows) нетБаза данных SQL Azure нетХранилище данных SQL AzureнетParallel Data Warehouse APPLIES TO: yesSQL Server (Windows only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

FILESTREAM позволяет приложениям на основе SQL ServerSQL Server хранить в файловой системе неструктурированные данные, например документы и изображения.FILESTREAM enables SQL ServerSQL Server-based applications to store unstructured data, such as documents and images, on the file system. Приложения могут одновременно использовать многопоточные API-интерфейсы и производительность файловой системы, тем самым обеспечивая транзакционную согласованность между неструктурированными и соответствующими им структурированными данными.Applications can leverage the rich streaming APIs and performance of the file system and at the same time maintain transactional consistency between the unstructured data and corresponding structured data.

Хранилище FILESTREAM объединяет компонент Компонент SQL Server Database EngineSQL Server Database Engine с файловыми системами NTFS или ReFS, размещая данные больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе в виде файлов.FILESTREAM integrates the Компонент SQL Server Database EngineSQL Server Database Engine with an NTFS or ReFS file systems by storing varbinary(max) binary large object (BLOB) data as files on the file system. Transact-SQLTransact-SQL можно вставлять, обновлять, запрашивать, искать и создавать резервные копии данных FILESTREAM. statements can insert, update, query, search, and back up FILESTREAM data. Интерфейсы файловой системы Win32 предоставляют потоковый доступ к этим данным.Win32 file system interfaces provide streaming access to the data.

Для кэширования данных файлов в хранилище FILESTREAM используется системный кэш NT.FILESTREAM uses the NT system cache for caching file data. Это позволяет снизить возможное влияние данных FILESTREAM на производительность компонента Компонент Database EngineDatabase Engine .This helps reduce any effect that FILESTREAM data might have on Компонент Database EngineDatabase Engine performance. Буферный пул SQL ServerSQL Server не используется, поэтому эта память доступна для обработки запросов.The SQL ServerSQL Server buffer pool is not used; therefore, this memory is available for query processing.

FILESTREAM не включается автоматически при установке или обновлении SQL ServerSQL Server.FILESTREAM is not automatically enabled when you install or upgrade SQL ServerSQL Server. FILESTREAM необходимо включить с помощью диспетчера конфигурации SQL Server и среды Среда SQL Server Management StudioSQL Server Management Studio.You must enable FILESTREAM by using SQL Server Configuration Manager and Среда SQL Server Management StudioSQL Server Management Studio. Для использования FILESTREAM нужно создать или изменить базу данных, которая будет содержать заданный тип файловой группы.To use FILESTREAM, you must create or modify a database to contain a special type of filegroup. После этого следует создать или изменить таблицу, чтобы она содержала столбец varbinary(max) с атрибутом FILESTREAM.Then, create or modify a table so that it contains a varbinary(max) column with the FILESTREAM attribute. После завершения выполнения этих задач можно будет пользоваться Transact-SQLTransact-SQL и Win32 для управления данными FILESTREAM.After you complete these tasks, you can use Transact-SQLTransact-SQL and Win32 to manage the FILESTREAM data.

Условия использования FILESTREAMWhen to Use FILESTREAM

В SQL ServerSQL Serverбольшие двоичные объекты могут представлять собой либо стандартный тип varbinary(max) , где данные хранятся в таблице базы данных, либо объекты FILESTREAM типа varbinary(max) , где данные хранятся в файловой системе.In SQL ServerSQL Server, BLOBs can be standard varbinary(max) data that stores the data in tables, or FILESTREAM varbinary(max) objects that store the data in the file system. Выбор в качестве хранилища базы данных или файловой системы определяется размером и назначением данных.The size and use of the data determines whether you should use database storage or file system storage. Объекты FILESTREAM следует использовать в следующих случаях:If the following conditions are true, you should consider using FILESTREAM:

  • средний размер сохраняемых объектов превышает 1 МБ;Objects that are being stored are, on average, larger than 1 MB.
  • важен быстрый доступ для чтения;Fast read access is important.
  • в разрабатываемых приложениях для логики приложений используется средний уровень.You are developing applications that use a middle tier for application logic.

При работе с объектами меньшего размера сохранение больших двоичных объектов типа varbinary(max) в базе данных часто позволяет добиться лучшей производительности потоков.For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

Хранилище FILESTREAMFILESTREAM Storage

Хранилище FILESTREAM реализовано в виде столбца типа varbinary(max) , данные которого хранятся в файловой системе как большие двоичные объекты.FILESTREAM storage is implemented as a varbinary(max) column in which the data is stored as BLOBs in the file system. Размеры объектов BLOB ограничены только размером тома файловой системы.The sizes of the BLOBs are limited only by the volume size of the file system. Стандартное ограничение типа varbinary(max) , согласно которому размер файла не должен превышать 2 ГБ, не применяется к большим двоичным объектам, сохраняемым в файловой системе.The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

Чтобы указать необходимость сохранения данных столбца в файловой системе, укажите атрибут FILESTREAM для столбца varbinary(max) .To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. В результате компонент Компонент Database EngineDatabase Engine будет сохранять все данные этого столбца в файловой системе, а не в файле базы данных.This causes the Компонент Database EngineDatabase Engine to store all data for that column on the file system, but not in the database file.

Данные FILESTREAM должны сохраняться в файловых группах FILESTREAM.FILESTREAM data must be stored in FILESTREAM filegroups. Файловая группа FILESTREAM представляет собой особую файловую группу, в которой вместо самих файлов содержатся системные каталоги файлов.A FILESTREAM filegroup is a special filegroup that contains file system directories instead of the files themselves. Данные системные каталоги файлов называются контейнерами данных.These file system directories are called data containers. Они являются интерфейсом между хранилищем компонента Компонент Database EngineDatabase Engine и хранилищем файловой системы.Data containers are the interface between Компонент Database EngineDatabase Engine storage and file system storage.

При использовании хранилища FILESTREAM обратите внимание на следующие аспекты:When you use FILESTREAM storage, consider the following:

  • если в таблице присутствует столбец FILESTREAM, каждая строка должна иметь уникальный идентификатор строки (не равен NULL);When a table contains a FILESTREAM column, each row must have a nonnull unique row ID.
  • в файловую группу FILESTREAM можно добавить несколько контейнеров данных;Multiple data containers can be added to a FILESTREAM filegroup.
  • вложенность контейнеров данных FILESTREAM не допускается;FILESTREAM data containers cannot be nested.
  • при использовании отказоустойчивого кластера файловые группы FILESTREAM должны находиться в ресурсах общего диска;When you are using failover clustering, the FILESTREAM filegroups must be on shared disk resources.
  • файловые группы FILESTREAM могут размещаться на сжатых томах.FILESTREAM filegroups can be on compressed volumes.

Интегрированное управлениеIntegrated Management

Так как FILESTREAM реализуется в виде столбца типа varbinary(max) и интегрируется непосредственно в компонент Компонент Database EngineDatabase Engine, большинство функций и средств управления SQL ServerSQL Server не требуют изменения для работы с данными FILESTREAM.Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the Компонент Database EngineDatabase Engine, most SQL ServerSQL Server management tools and functions work without modification for FILESTREAM data. Так, например, с данными FILESTREAM можно использовать любые модели резервного копирования и восстановления, а резервное копирование данных FILESTREAM осуществляется при помощи структурированных данных в базе данных.For example, you can use all backup and recovery models with FILESTREAM data, and the FILESTREAM data is backed up with the structured data in the database. Если резервное копирование данных FILESTREAM при помощи реляционных данных выполнять нежелательно, для исключения файловых групп FILESTREAM можно воспользоваться частичным резервным копированием.If you do not want to back up FILESTREAM data with relational data, you can use a partial backup to exclude FILESTREAM filegroups.

Встроенные функции безопасностиIntegrated Security

В SQL ServerSQL Serverзащита данных FILESTREAM осуществляется таким же образом, как и защита любых других данных: посредством предоставления разрешений на уровнях таблицы или столбца.In SQL ServerSQL Server, FILESTREAM data is secured just like other data is secured: by granting permissions at the table or column levels. Пользователь, у которого имеется разрешение на столбец FILESTREAM в таблице, может открыть связанные файлы.If a user has permission to the FILESTREAM column in a table, the user can open the associated files.

Примечание

В данных FILESTREAM не поддерживается шифрование.Encryption is not supported on FILESTREAM data.

Разрешения для доступа к контейнеру FILESTREAM предоставляются только той учетной записи, под которой выполняется служба SQL ServerSQL Server .Only the account under which the SQL ServerSQL Server service account runs is granted permissions to the FILESTREAM container. Другим учетным записям разрешения на доступ к контейнеру данных предоставлять не рекомендуется.We recommend that no other account be granted permissions on the data container.

Примечание

Имена входа SQL не работают с контейнерами FILESTREAM.SQL logins will not work with FILESTREAM containers. С контейнерами FILESTREAM работает только проверка подлинности NTFS или ReFS.Only NTFS or ReFS authentication will work with FILESTREAM containers.

Доступ к данным BLOB с помощью Transact-SQL и потокового доступа к файловой системеAccessing BLOB Data with Transact-SQL and File System Streaming Access

После сохранения данных в столбце FILESTREAM доступ к файлам возможен в транзакциях Transact-SQLTransact-SQL или через API-интерфейсы Win32.After you store data in a FILESTREAM column, you can access the files by using Transact-SQLTransact-SQL transactions or by using Win32 APIs.

Доступ с помощью Transact-SQLTransact-SQL Access

Язык Transact-SQLTransact-SQLпозволяет вставлять, обновлять и удалять данные FILESTREAM:By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • Операция вставки позволяет выполнить предварительное заполнение поля FILESTREAM значением NULL, пустым значением или встроенными данными относительно небольшого размера.You can use an insert operation to prepopulate a FILESTREAM field with a null value, empty value, or relatively short inline data. Однако при работе с большими объемами данных большей эффективности потока можно добиться при помощи файла, использующего интерфейсы Win32.However, a large amount of data is more efficiently streamed into a file that uses Win32 interfaces.
  • При обновлении поля FILESTREAM происходит изменение базовых данных BLOB в файловой системе.When you update a FILESTREAM field, you modify the underlying BLOB data in the file system. Если в поле FILESTREAM содержится значение NULL, данные BLOB, связанные с этим полем, удаляются.When a FILESTREAM field is set to NULL, the BLOB data associated with the field is deleted. Обновление фрагмента данных на языке Transact-SQLTransact-SQL , реализованное в виде конструкции UPDATE . Write(), использовать для частичного обновления данных нельзя.You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE . Write(), to perform partial updates to the data.
  • При удалении строки или удалении или усечении таблицы, содержащей данные FILESTREAM, удаляются базовые данные BLOB в файловой системе.When you delete a row or delete or truncate a table that contains FILESTREAM data, you delete the underlying BLOB data in the file system.

Потоковый доступ к файловой системеFile System Streaming Access

Поддержка потоков в Win32 запускается в контексте транзакций SQL ServerSQL Server .The Win32 streaming support works in the context of a SQL ServerSQL Server transaction. В рамках транзакции функции FILESTREAM позволяют получить логический UNC-путь к файлу в файловой системе.Within a transaction, you can use FILESTREAM functions to obtain a logical UNC file system path of a file. API-интерфейс OpenSqlFilestream позволяет получить дескриптор файла.You then use the OpenSqlFilestream API to obtain a file handle. Затем этот дескриптор может использоваться интерфейсами файловых потоков Win32, например ReadFile() и WriteFile(), для доступа и обновления файла посредством файловой системы.This handle can then be used by Win32 file streaming interfaces, such as ReadFile() and WriteFile(), to access and update the file by way of the file system.

Поскольку операции над файлами являются транзакционными, удалить или переименовать файлы FILESTREAM с помощью файловой системы невозможно.Because file operations are transactional, you cannot delete or rename FILESTREAM files through the file system.

Модель инструкцииStatement Model

Доступ к файловой системе FILESTREAM моделирует инструкцию на языке Transact-SQLTransact-SQL , используя операции открытия и закрытия файлов.The FILESTREAM file system access models a Transact-SQLTransact-SQL statement by using file open and close. Эта инструкция запускается при открытии дескриптора файла и завершается при закрытии этого дескриптора.The statement starts when a file handle is opened and ends when the handle is closed. Например, при закрытии обработчика записи срабатывают все возможные триггеры AFTER, зарегистрированные в таблице, как если бы была выполнена инструкция UPDATE.For example, when a write handle is closed, any possible AFTER trigger that is registered on the table fires as if an UPDATE statement is completed.

Пространство имен хранилищаStorage Namespace

В хранилище FILESTREAM компонент Компонент Database EngineDatabase Engine управляет пространством имен физической файловой системы объектов BLOB.In FILESTREAM, the Компонент Database EngineDatabase Engine controls the BLOB physical file system namespace. Новая встроенная функция, PathName, предоставляет логический UNC-путь объекта BLOB, соответствующего каждой ячейке FILESTREAM в таблице.A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. В приложении этот логический путь используется для получения дескриптора Win32 и работы с данными BLOB посредством обычных интерфейсов файловой системы Win32.The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. Эта функция возвращает значение NULL, если значением столбца FILESTREAM является NULL.The function returns NULL if the value of the FILESTREAM column is NULL.

Доступ к транзакционной файловой системеTransacted File System Access

Новая встроенная функция GET_FILESTREAM_TRANSACTION_CONTEXT()возвращает токен, представляющий актуальную транзакцию, с которой связан сеанс.A new intrinsic function, GET_FILESTREAM_TRANSACTION_CONTEXT(), provides the token that represents the current transaction that the session is associated with. Эта транзакция должна быть запущена, не прервана и не зафиксирована.The transaction must have been started and not yet aborted or committed. Получение токена позволяет приложению связать потоковые операции файловой системы FILESTREAM с запущенной транзакцией.By obtaining a token, the application binds the FILESTREAM file system streaming operations with a started transaction. Эта функция возвращает значение NULL в случае отсутствия явно запущенной транзакции.The function returns NULL in case of no explicitly started transaction.

Прежде чем транзакция будет зафиксирована или прервана, все дескрипторы файлов должны быть закрыты.All file handles must be closed before the transaction commits or aborts. Если дескриптор остается открытым за пределами области действия транзакции, дополнительные операции чтения, применяемые к этому дескриптору, завершатся ошибкой; дополнительные операции записи, применяемые к этому дескриптору, будут выполнены успешно, но фактические данные не будут записаны на диск.If a handle is left open beyond the transaction scope, additional reads against the handle will cause a failure; additional writes against the handle will succeed, but the actual data will not be written to disk. Аналогичным образом, если работа базы данных или экземпляра компонента Компонент Database EngineDatabase Engine завершается, все открытые дескрипторы становятся недопустимыми.Similarly, if the database or instance of the Компонент Database EngineDatabase Engine shuts down, all open handles are invalidated.

Надежность транзакцийTransactional Durability

При работе с FILESTREAM до момента фиксации транзакции надежность транзакций для данных FILESTREAM объектов BLOB, измененных на основе потокового доступа к файловой системе, обеспечивает компонент Компонент Database EngineDatabase Engine .With FILESTREAM, upon transaction commit, the Компонент Database EngineDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

Семантика изоляцииIsolation Semantics

Управление семантикой изоляции осуществляется уровнями изоляции транзакций компонента Компонент Database EngineDatabase Engine .The isolation semantics are governed by Компонент Database EngineDatabase Engine transaction isolation levels. Для доступа к Transact-SQLTransact-SQL и файловой системе поддерживается только уровень изоляции READ COMMITTED.Read-committed isolation level is supported for Transact-SQLTransact-SQL and file system access. Поддерживаются операции чтения с возможностью повторения, а также сериализуемая изоляция и изоляция моментальных снимков.Repeatable read operations, and also serializable and snapshot isolations, are supported. «Грязные» чтения не поддерживаются.Dirty read is not supported.

Открытые операции доступа к файловой системе не ожидают никаких блокировок.The file system access open operations do not wait for any locks. Вместо этого открытые операции моментально завершаются ошибкой, если вследствие изоляции транзакции не удается получить доступ к данным.Instead, the open operations fail immediately if they cannot access the data because of transaction isolation. Потоковые вызовы API завершаются ошибкой ERROR_SHARING_VIOLATION, если вследствие нарушения изоляции невозможно продолжение открытой операции.The streaming API calls fail with ERROR_SHARING_VIOLATION if the open operation cannot continue because of isolation violation.

Чтобы разрешить выполнение частичных обновлений, приложение может издать команду FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT для выборки старого содержимого в файл, открытый с помощью ссылки на дескриптор.To allow for partial updates to be made, the application can issue a device FS control (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT) to fetch the old content into the file that the opened handle references. Это приведет к началу копирования старого содержимого на стороне сервера.This will trigger a server-side old content copy. Чтобы добиться лучшей производительности приложения и избежать потенциальных сбоев из-за времени ожидания при работе с очень большими файлами, рекомендуется использовать асинхронные операции ввода-вывода.For better application performance and to avoid running into potential time-outs when you are working with very large files, we recommend that you use asynchronous I/O.

Если формирование команды FSCTL произошло после записи в дескриптор, сохраняется последняя операция записи, а результаты предыдущих операций записи в дескриптор теряются.If the FSCTL is issued after the handle has been written to, the last write operation will persist, and prior writes that were made to the handle are lost.

API-интерфейсы файловой системы и поддерживаемые уровни изоляцииFile System APIs and Supported Isolation Levels

Если API-интерфейсу файловой системы не удается открыть файл из-за нарушения изоляции, то возвращается исключение ERROR_SHARING_VIOLATION.When a file system API cannot open a file because of an isolation violation, an ERROR_SHARING_VIOLATION exception is returned. Это нарушение изоляции возникает в том случае, когда две транзакции пытаются получить доступ к одному и тому же файлу.This isolation violation occurs when two transactions try to access the same file. Результат операции доступа зависит от режима, в котором файл был открыт, и версии SQL ServerSQL Server , в которой выполняется транзакция.The outcome of the access operation depends on the mode the file was opened in and the version of SQL ServerSQL Server that the transaction is running on. В следующей таблице приведены возможные результаты обращения двух транзакций к одному и тому же файлу.The following table outlines the possibly outcomes for two transactions that are accessing the same file.

Транзакция 1Transaction 1 Транзакция 2Transaction 2 Результат на сервере SQL Server 2008Outcome on SQL Server 2008 Результат на SQL Server 2008 R2 и более поздних версияхOutcome on SQL Server 2008 R2 and later versions
Открыта для чтения.Open for read. Открыта для чтения.Open for read. Обе завершаются успешно.Both succeed. Обе завершаются успешно.Both succeed.
Открыта для чтения.Open for read. Открыта для записи.Open for write. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на операции чтения, выполняемые транзакцией 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на операции чтения, выполняемые транзакцией 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Открыта для записи.Open for write. Открыта для чтения.Open for read. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Обе завершаются успешно.Both succeed.
Открыта для записи.Open for write. Открыта для записи.Open for write. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.Open for transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Открыта для чтения.Open for read. Открыта для SELECT.Open for SELECT. Обе завершаются успешно.Both succeed. Обе завершаются успешно.Both succeed.
Открыта для чтения.Open for read. Открыта для UPDATE или DELETE.Open for UPDATE or DELETE. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на операции чтения, выполняемые транзакцией 1.Write operations under transaction 2 do not affect read operations performed in transaction 1. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на операции чтения, выполняемые транзакцией 1.Write operations under transaction 2 do not affect read operations performed in transaction 1.
Открыта для записи.Open for write. Открыта для SELECT.open for SELECT. Транзакция 2 блокируется, пока транзакция 1 не будет зафиксирована или завершена или пока не истечет время ожидания блокировки транзакции.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Обе завершаются успешно.Both succeed.
Открыта для записи.Open for write. Открыта для UPDATE или DELETE.Open for UPDATE or DELETE. Транзакция 2 блокируется, пока транзакция 1 не будет зафиксирована или завершена или пока не истечет время ожидания блокировки транзакции.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out. Транзакция 2 блокируется, пока транзакция 1 не будет зафиксирована или завершена или пока не истечет время ожидания блокировки транзакции.Transaction 2 blocks until transaction 1 commits or ends the transaction, or the transaction lock times out.
Открыта для SELECT.Open for SELECT. Открыта для чтения.Open for read. Обе завершаются успешно.Both succeed. Обе завершаются успешно.Both succeed.
Открыта для SELECT.Open for SELECT. Открыта для записи.Open for write. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на транзакцию 1.Write operations under transaction 2 do not affect transaction 1. Обе завершаются успешно.Both succeed. Операции записи в рамках транзакции 2 не влияют на транзакцию 1.Write operations under transaction 2 do not affect transaction 1.
Открыта для UPDATE или DELETE.Open for UPDATE or DELETE. Открыта для чтения.Open for read. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. Обе завершаются успешно.Both succeed.
Открыта для UPDATE или DELETE.Open for UPDATE or DELETE. Открыта для записи.Open for write. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.
Открыта для SELECT с повторяющимся чтением.Open for SELECT with repeatable read. Открыта для чтения.Open for read. Обе завершаются успешно.Both succeed. Обе завершаются успешно.Both succeed.
Открыта для SELECT с повторяющимся чтением.Open for SELECT with repeatable read. Открыта для записи.Open for write. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception. При открытии для транзакции 2 возникает ошибка с исключением ERROR_SHARING_VIOLATION.The open operation on transaction 2 fails with an ERROR_SHARING_VIOLATION exception.

Сквозная запись от удаленных клиентовWrite-Through from Remote Clients

Удаленный доступ файловой системы к данным FILESTREAM осуществляется по протоколу SMB.Remote file system access to FILESTREAM data is enabled over the Server Message Block (SMB) protocol. Если клиент является удаленным, операции записи не кэшируются на стороне клиента.If the client is remote, no write operations are cached by the client side. Операции записи всегда отправляются на сервер.The write operations will always be sent to the server. Кэширование данных возможно на серверной стороне.The data can be cached on the server side. В приложениях, запущенных на удаленных клиентах, рекомендуется объединять небольшие операции записи, чтобы сократить число операций записи, используя данные большего размера.We recommend that applications that are running on remote clients consolidate small write operations to make fewer write operations using larger data size.

Создание представлений, отображенных в памяти (отображенных в памяти операций ввода-вывода), при помощи дескриптора FILESTREAM не поддерживается.Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. Если для данных FILESTREAM используется отображение в памяти, то компонент Компонент Database EngineDatabase Engine не может гарантировать согласованность и надежность данных или целостность базы данных.If memory mapping is used for FILESTREAM data, the Компонент Database EngineDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

Включение и настройка FILESTREAMEnable and Configure FILESTREAM
Создание базы данных с поддержкой FILESTREAMCreate a FILESTREAM-Enabled Database
Создание таблицы для хранения данных FILESTREAMCreate a Table for Storing FILESTREAM Data
Обращение к данным FILESTREAM с помощью Transact-SQL Создание клиентских приложений для данных FILESTREAMAccess FILESTREAM Data with Transact-SQL Create Client Applications for FILESTREAM Data
Доступ к данным FILESTREAM с OpenSqlFilestreamAccess FILESTREAM Data with OpenSqlFilestream
Создание частичных обновлений данных FILESTREAMMake Partial Updates to FILESTREAM Data
Избегание конфликтов в операциях баз данных в приложениях FILESTREAMAvoid Conflicts with Database Operations in FILESTREAM Applications
переместить базу данных с поддержкой FILESTREAMMove a FILESTREAM-Enabled Database
Установка FILESTREAM в отказоустойчивом кластереSet Up FILESTREAM on a Failover Cluster
Настройка брандмауэра для доступа FILESTREAMConfigure a Firewall for FILESTREAM Access

Совместимость FILESTREAM с другими компонентами SQL ServerFILESTREAM Compatibility with Other SQL Server Features
Динамические административные представления Filestream и FileTable (Transact-SQL)Filestream and FileTable Dynamic Management Views (Transact-SQL)
Представления каталога Filestream и FileTable (Transact-SQL)Filestream and FileTable Catalog Views (Transact-SQL)
Системные хранимые процедуры Filestream и FileTable (Transact-SQL)Filestream and FileTable System Stored Procedures (Transact-SQL)