FILESTREAM (SQL Server)FILESTREAM (SQL Server)

適用対象: ○SQL Server (Windows のみ)×Azure SQL Database ×Azure SQL Data Warehouse ×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 データベース エンジンSQL Server Database Engine varbinary(max) BLOB (バイナリ ラージ オブジェクト) データをファイル システム上のファイルとして格納することにより、 と NTFS または ReFS ファイル システムを統合します。FILESTREAM integrates the SQL Server データベース エンジンSQL 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 Engine のパフォーマンスに与える影響を軽減できます。This helps reduce any effect that FILESTREAM data might have on データベース エンジンDatabase 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. 次に、テーブルを作成または変更して、FILESTREAM 属性を格納する varbinary(max) 列を含めます。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.

FILESTREAM を使用する場合When to Use FILESTREAM

SQL ServerSQL Serverでは、BLOB を、データをテーブルに格納する標準の 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. 次の条件が true の場合は、FILESTREAM を使用することを検討する必要があります。If the following conditions are true, you should consider using FILESTREAM:

  • 格納するオブジェクトの平均的なサイズが 1 MB より大きい。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) BLOB をデータベースに格納する方が一般に高いストリーミング パフォーマンスが得られます。For smaller objects, storing varbinary(max) BLOBs in the database often provides better streaming performance.

FILESTREAM ストレージFILESTREAM Storage

FILESTREAM ストレージは、データを BLOB としてファイル システムに格納する 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. ファイル システムに格納される BLOB には、標準の varbinary(max) の制限 (ファイル サイズ 2 GB) は適用されません。The standard varbinary(max) limitation of 2-GB file sizes does not apply to BLOBs that are stored in the file system.

列のデータをファイル システムに格納するように指定するには、 varbinary(max) 列で FILESTREAM 属性を指定します。To specify that a column should store data on the file system, specify the FILESTREAM attribute on a varbinary(max) column. データベース エンジンDatabase Engine では、これにより、その列のすべてのデータがファイル システム (データベース ファイル以外の場所) に格納されるようになります。This causes the データベース エンジンDatabase 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 Engine ストレージとファイル システム ストレージの間のインターフェイスです。Data containers are the interface between データベース エンジンDatabase Engine storage and file system storage.

FILESTREAM ストレージを使用する際は、以下の点を考慮してください。When you use FILESTREAM storage, consider the following:

  • テーブルに FILESTREAM 列が含まれている場合には、各行に NULL でない一意の行 ID が必要です。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 Engineに統合されているため、 SQL ServerSQL Server の管理ツールや関数のほとんどを FILESTREAM データで使用できます。FILESTREAM データに変更を加える必要もありません。Because FILESTREAM is implemented as a varbinary(max) column and integrated directly into the データベース エンジンDatabase 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 SecurityIntegrated 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.

Transact-SQL およびファイル システム ストリーミング アクセスによる BLOB データへのアクセスAccessing BLOB Data with Transact-SQL and File System Streaming Access

FILESTREAM 列にデータを格納した後、それらのファイルにアクセスするには、 Transact-SQLTransact-SQL トランザクションか Win32 API を使用します。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-SQL アクセスTransact-SQL Access

Transact-SQLTransact-SQLを使用して、FILESTREAM データの挿入、更新、および削除を行うことができます。By using Transact-SQLTransact-SQL, you can insert, update, and delete FILESTREAM data:

  • 挿入操作を使用すると、null 値、空の値、または比較的短いインライン データを FILESTREAM フィールドに事前設定することができます。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. UPDATE Transact-SQLTransact-SQL .Write() として実装されているの大量の更新を使用してデータの部分更新を実行することはできません。You cannot use a Transact-SQLTransact-SQL chunked update, implemented as UPDATE . Write(), to perform partial updates to the data.
  • FILESTREAM データを含む行を削除したり、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. 次に、OpenSqlFilestream API を使用してファイル ハンドルを取得します。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. たとえば、書き込みハンドルを閉じると、UPDATE ステートメントが完了したときのように、テーブルに登録されている AFTER トリガーが起動します。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 Engine が BLOB の物理ファイル システムの名前空間を制御します。In FILESTREAM, the データベース エンジンDatabase Engine controls the BLOB physical file system namespace. 新しい組み込み関数の PathNameを使用すると、テーブルの各 FILESTREAM セルに対応する BLOB の論理 UNC パスを取得できます。A new intrinsic function, PathName, provides the logical UNC path of the BLOB that corresponds to each FILESTREAM cell in the table. アプリケーションでは、この論理パスを使用して Win32 ハンドルを取得し、標準の Win32 ファイル システム インターフェイスを使用して BLOB データを操作します。The application uses this logical path to obtain the Win32 handle and operate on the BLOB data by using regular Win32 file system interfaces. この関数は、FILESTREAM 列の値が NULL の場合は 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 Engine のデータベースやインスタンスがシャットダウンすると、開いているハンドルはすべて無効になります。Similarly, if the database or instance of the データベース エンジンDatabase Engine shuts down, all open handles are invalidated.

トランザクションの持続性Transactional Durability

FILESTREAM では、トランザクションのコミット時に、ファイル システム ストリーミング アクセスから変更された FILESTREAM BLOB データのトランザクションの持続性が データベース エンジンDatabase Engine によって確保されます。With FILESTREAM, upon transaction commit, the データベース エンジンDatabase Engine ensures transaction durability for FILESTREAM BLOB data that is modified from the file system streaming access.

分離のセマンティクスIsolation Semantics

分離のセマンティクスは、 データベース エンジンDatabase Engine のトランザクション分離レベルに従います。The isolation semantics are governed by データベース エンジンDatabase 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 操作、およびシリアル化可能な分離やスナップショット分離もサポートされます。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.

アプリケーションでは、部分更新を実行できるようにするために、デバイス FS 制御 (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. アプリケーションのパフォーマンスが低下したり、非常に大きなファイルを操作する際にタイムアウトになったりしないように、非同期 I/O を使用することをお勧めします。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. この分離違反は、2 つのトランザクションが同じファイルにアクセスしようとしたときに発生します。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. 次の表に、同じファイルにアクセスする 2 つのトランザクションで得られる可能性のある結果を示します。The following table outlines the possibly outcomes for two transactions that are accessing the same file.

トランザクション 1Transaction 1 トランザクション 2Transaction 2 SQL Server 2008 での結果Outcome 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.
Repeatable Read の SELECT 用に開く。Open for SELECT with repeatable read. 読み取り用に開く。Open for read. どちらも成功します。Both succeed. どちらも成功します。Both succeed.
Repeatable Read の 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 ハンドルを使用してメモリ マップ表示 (メモリ マップ I/O) を作成することはできません。Creating memory mapped views (memory mapped I/O) by using a FILESTREAM handle is not supported. FILESTREAM データに対してメモリ マッピングを使用すると、 データベース エンジンDatabase Engine でデータの一貫性および持続性やデータベースの整合性を保証できなくなります。If memory mapping is used for FILESTREAM data, the データベース エンジンDatabase Engine cannot guarantee consistency and durability of the data or the integrity of the database.

FILESTREAM の有効化と構成Enable and Configure FILESTREAM
FILESTREAM が有効なデータベースを作成する方法Create a FILESTREAM-Enabled Database
FILESTREAM データを格納するテーブルを作成する方法Create a Table for Storing FILESTREAM Data
Transact-SQL による FILESTREAM データへのアクセス FILESTREAM データ用のクライアント アプリケーションを作成するAccess FILESTREAM Data with Transact-SQL Create Client Applications for FILESTREAM Data
OpenSqlFilestream による FILESTREAM データへのアクセスAccess FILESTREAM Data with OpenSqlFilestream
FILESTREAM データの部分的な更新Make Partial Updates to FILESTREAM Data
FILESTREAM アプリケーションでのデータベース操作との競合の回避Avoid Conflicts with Database Operations in FILESTREAM Applications
FILESTREAM が有効なデータベースの移動Move a FILESTREAM-Enabled Database
フェールオーバー クラスターでの FILESTREAM の設定Set Up FILESTREAM on a Failover Cluster
FILESTREAM アクセスのためのファイアウォールの構成Configure a Firewall for FILESTREAM Access

FILESTREAM と SQL Server のその他の機能との互換性FILESTREAM 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)