SharePoint 2010 での FILESTREAM

原文の記事の投稿日: 2011 年 4 月 21 日 (木曜日)

投稿者: Bill Baer、マイクロソフト、シニア テクニカル製品マネージャー - SharePoint

FILESTREAM は SQL Server 2008 での新機能であり、NTFS ファイル システムの構造化されていないデータを格納できるようにします。FILESTREAM (ローカルまたはリモート) は、構造化されていない大きなバイナリ データをコンテンツ アドレスして可能記憶装置や市販の記憶装置に格納できるようにすることで設備投資を削減するしくみとして、SharePoint 2010 でサポートされています。

構造化されていないデータ

構造化されていないデータとは、定義されているモデルに従っていない情報、またはリレーショナル テーブルにうまく収まらない情報のことです。SharePoint での構造化されていないデータには、Microsoft Office のドキュメント ファイル形式、ビデオ、オーディオ、および関連するファイル タイプなどがあります。

 

構造化されたデータ

SharePoint での構造化されたデータとは、対応する構造化されていないデータまたは BLOB と関連付けられているメタデータのことです。構造化されたデータの例として最もよく使われるのはリレーショナル データベースです。

 

SQL Server と構造化されていないデータ記憶域

SQL Server で構造化されていないデータを格納する方法としては、RBS、SQL BLOB、FILESTREAM の 3 つがあります。

  • リモート BLOB ストレージ (RBS) では、SharePoint は SQL Server の新しいレイヤーに依存して、データベースの外部の異なる BLOB ストア (ファイル システムまたは専用の BLOB ストア) に格納されている BLOB データの読み取りや更新を行います。
  • SQL BLOB は、SharePoint での従来の BLOB 記憶域のことであり、BLOB データは構造化されたメタデータと一緒にコンテンツ データベースに格納されます。
  • FILESTREAM

 

FILESTREAM の概要

FILESTREAM は、varbinary(max) データ型で実装されます。このデータ型は、データベース エンジンに対し、ファイル自体の代わりにファイル システム ディレクトリを含む FILESTREAM ファイル グループ (データ コンテナーとも呼ばれます) を使用して、ファイル システムに構造化されていないデータを格納するように指示します。データ コンテナーは、データベース エンジンの記憶域とファイル システムの記憶域の間のインターフェイスです。varbinary は、SharePoint 2010 コンテンツ データベースに格納されるバイナリ ラージ オブジェクト (BLOB) に対するバイナリ データ型の指定であり、可変長バイナリ データを意味します。(MAX) は、最大記憶域サイズが 2^31-1 バイトつまり 2GB であることを示す値です。リモート BLOB ストレージでは、SharePoint での 2GB というファイル サイズ制限を超えるためのメカニズムは提供されていません。

 

SharePoint 2010 では、リモート BLOB データは、RBS 用に構成されているコンテンツ データベースの一意の ID によって参照されます (図を参照)。

 

 

 

 

 

FILESTREAM には、パフォーマンスに関していくつかの利点があります。1) FILESTREAM は、NT のシステム キャッシュを使用してファイル データをキャッシュし、データベース エンジンのパフォーマンスに対する FILESTREAM データの影響を軽減します。2) SQL Server のバッファー プールは使用されないため、メモリをクエリ処理に使用できます。

 

FILESTREAM では、1MB を超える FILESTREAM または BLOB データから恩恵を受けるビデオ ファイルなどの大きい BLOB データを格納するために SharePoint が使用されるシナリオに最善の値が提供されます。

 

特別な考慮事項

 

FILESTREAM とビジネス継続性の管理

 

FILESTREAM ファイル グループはプリンシパル サーバーには作成できず、データベース ミラーリングは FILESTREAM ファイル グループを含むデータベースに対しては構成できないので、データベース ミラーリングは FILESTREAM をサポートしません。FILESTREAM プロバイダーを使用して BLOB データをローカルに (同じコンテンツ データベース内に) 格納する場合、データベースをデータベース ミラーリング用に構成することはできません。

 

別の SQL データベースに BLOB データを格納するように FILESTREAM プロバイダー構成する場合、またはサードパーティの BLOB ストアを使用する場合は、コンテンツ データベースをミラーリングできます。ただし、データベース ミラーリングはコンテンツ データベースに対してのみ適用され、BLOB データには適用されません。BLOB データは別に処理し、関連付けられているメタデータ (コンテンツ データベース) との同期を維持する必要があります。FILESTREAM の BLOB データベースの場合、これはログ配布を使用して行うことができます。

 

FILESTREAM と SQL Server のリモート BLOB ストアの違いの詳細については、次の記事も参照してください。 https://blogs.msdn.com/b/sqlrbs/archive/2009/11/18/sql-server-remote-blob-store-and-filestream-feature-comparison.aspx (英語)

 

FILESTREAM と Office Web アプリケーション キャッシュ

 

Office Web アプリケーション キャッシュは、Word および PowerPoint の Web アプリケーションによって、ブラウザーで表示するために要求されるドキュメントのバージョンを作成するために使用されます。これにより、同じドキュメントに対して複数の要求があると、キャッシュにあるドキュメントまたはプレゼンテーションが提供されるため、パフォーマンスが向上し、サーバー コンピューターでのリソース消費が減ります。

 

Office Web アプリケーション キャッシュは、サーバーのファイル システムと、Web アプリケーションごとにホストされる "特別な" サイト コレクション内の、2 つの異なる階層で行われます。Office Web アプリケーションによって行われたドキュメントまたはプレゼンテーションの要求は、両方のキャッシュを通して処理されて、イメージがクライアントで表示されます。Office Web アプリケーションの機能が有効になっている Web アプリケーション内のすべてのサイト コレクションで、両方のキャッシュの場所が使用されます。

 

FILESTREAM が構成されているコンテンツ データベースは、構成されているプロバイダーの場所で、ドキュメントまたはプレゼンテーションのキャッシュ バージョンを格納します。 Office Web アプリケーション キャッシュは、FILESTREAM 用に構成されていないデータベースに構成することをお勧めします。

 

SharePoint 2010 での FILESTREAM の構成

以下の説明は、デモンストレーション用の単一サーバーへの展開で使用するためのものであり、ローカル FILESTREAM プロバイダーを実装します。

 

対象の SQL Server インスタンスで FILESTREAM を有効にする

 

1. [スタート] (Start) メニューをクリックし、[すべてのプログラム] (All Programs) をポイントし、[Microsoft SQL Server 2008 (R2)] をポイントします。次に、[構成ツール] (Configuration Tools) をポイントし、[SQL Server 構成マネージャー] (SQL Server Configuration Manager) をクリックします。

2. サービスの一覧で、[SQL Server サービス] (SQL Server Services) を右クリックし、[開く] (Open) をクリックします。

3. [SQL Server 構成マネージャー] (SQL Server Configuration Manager) スナップインで、FILESTREAM を有効にする SQL Server のインスタンスを探します。

4. インスタンスを右クリックし、[プロパティ] (Properties) をクリックします。

5. [SQL Server のプロパティ] (SQL Server Properties) ダイアログ ボックスで、[FILESTREAM] タブをクリックします。

6. [Transact-SQL アクセスに対して FILESTREAM を有効にする] (Enable FILESTREAM for Transact-SQL access) チェック ボックスをオンにします。

7. FILESTREAM データを Windows で読み書きする場合は、[ファイル I/O ストリーム アクセスに対して FILESTREAM を有効にする] (Enable FILESTREAM for file I/O streaming access) をオンにします。 [Windows 共有名] (Windows Share Name) ボックスに Windows 共有の名前を入力します。

8. リモート クライアントがこの共有に格納されている FILESTREAM データにアクセスする必要がある場合は、[リモート クライアントに FILESTREAM データへのストリーム アクセスを許可する] (Allow remote clients to have streaming access to FILESTREAM data) をオンにします。

9. [適用] (Apply) をクリックします。

10. [スタート] (Start)、[すべてのプログラム] (All Programs)、[Microsoft SQL Server 2008 (R2)]、[SQL Server Management Studio] の順にクリックします。

11. SQL Server Management Studio で [新しいクエリ] (New Query) をクリックして、クエリ エディターを表示します。

12. クエリ エディターで以下の Transact-SQL コードを入力します。

 

EXEC sp_configure filestream_access_level, 2

 

クエリ エディターで以下の Transact-SQL コードを入力します。

 

RECONFIGURE

RBS データ ストアを準備する

 

1. [スタート] (Start)、[すべてのプログラム] (All Programs)、[Microsoft SQL Server 2008 (R2)]、[SQL Server Management Studio] の順にクリックします。

2. [データベース] (Databases) を展開します。

3. BLOB ストアを作成するコンテンツ データベースを選択して、[新しいクエリ] (New Query) をクリックします。

4. SQL Server Management Studio で [新しいクエリ] (New Query) をクリックして、クエリ エディターを表示します。

5. クエリ エディターで以下の Transact-SQL コードを入力します。

 

use [データベース名]

 

if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'

 

クエリ エディターで以下の Transact-SQL コードを入力します。

 

use [データベース名]

 

if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [Database Name] add filegroup RBSFilestreamProvider contains filestream

 

クエリ エディターで以下の Transact-SQL コードを入力します。

 

use [データベース名]

 

alter database [データベース名] add file (name = RBSFilestreamFile, filename = 'c:\BlobStore') to filegroup RBSFilestreamProvider

Microsoft SQL Server 2008 R2 リモート BLOB ストアをインストールする

 

Microsoft SQL Server 2008 R2 リモート BLOB ストアの x64 パッケージを、次の場所にある Microsoft SQL Server 2008 R2 Feature Pack からダウンロードします。 https://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52

 

管理者権限でコマンド プロンプトを開き、次のコマンドを実行して、前の手順でダウンロードした RBS.MSI をインストールします。

 

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="<データベース名>" DBINSTANCE="<インスタンス名>" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

 

前のステートメントでは、RBS.MSI へのフル パスを指定します (C:\Users\Administrator\Desktop\RBS.MSI)。DBNAME および DBINSTANCE の値は、実際の環境に合わせてください。

 

リモート BLOB ストレージを有効にする

1. [スタート] (Start) メニューで [すべてのプログラム] (All Programs) をクリックします。

2. [Microsoft SharePoint 2010 製品] (Microsoft SharePoint 2010 Products) をクリックします。

3. [SharePoint 2010 管理シェル] (SharePoint 2010 Management Shell) をクリックします。

4. SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、構成するコンテンツ データベースを設定します。

$database=Get-SPContentDatabase –Identity “データベース名”

SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、コンテンツ データベースが Microsoft SQL Server リモート BLOB ストレージを使用する方法を決定する設定を保持しているオブジェクトを取得します。

$rbs=$database.RemoteBlobStorageSettings

SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、選択したコンテンツ データベースに RBS がインストールされているかどうかを判別します。

$rbs.Installed()

$rbs.Installed() の結果は True である必要があります。結果が False の場合は、rbs_install_log.txt を調べて RBS.MSI が製法にインストールされていることを確認します。インストール ステートメントが実行されたことを確認します。SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、選択したコンテンツ データベースの RBS を有効にします。

 

$rbs.Enable()

SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、選択したコンテンツ データベースの RBSprovider を設定します。

$rbs.SetActiveProviderName($rbs.GetProviderNames()[0])

 

$rbs

 

$rbs の結果は次のようになります。

表 1

 

表 1 の説明

 

Enabled は、選択したコンテンツ データベースで RBS が有効になっているかどうかを示します。

 

ActiveProviderName は、新しいファイルが格納される SQL リモート BLOB ストレージの名前です。新しいファイルが SQL リモート BLOB ストレージを使用して格納されない場合は、何も表示されません。

 

MinimumBlobStorageSize は、BLOB を RBS ストレージに格納した方がよいとみなされる最小サイズです。指定されている MinimumBlobStorageSize を超える BLOB データは、RBS データ ストアに格納されます。

 

FILESTREAM のパフォーマンス データでは、BLOB データが 1MB を超えるとストリーミングのパフォーマンスが最も効率的であることが示されています。 https://msdn.microsoft.com/ja-jp/library/cc949109(sql.100).aspx (英語) も参照してください。

 

 

MinimumBlobStorageSize を構成するには:

1. [スタート] (Start) メニューで [すべてのプログラム] (All Programs) をクリックします。

2. [Microsoft SharePoint 2010 製品] (Microsoft SharePoint 2010 Products) をクリックします。

3. [SharePoint 2010 管理シェル] (SharePoint 2010 Management Shell) をクリックします。

4. SharePoint 2010 管理シェルで、次の Windows PowerShell ステートメントを入力して、MinimumBlobStorageSize を 1MB に構成します。

$database = Get-SPContentDatabase “データベース名”

 

$database.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576

 

$database.Update()

UpgradePersistedProperties は、削除または変更されたフィールドのフィールド名と値のコレクションを示します。

 

インストールの検証

FILESTREAM の構成と RBS のインストールを検証するには:

 

1. [スタート] (Start)、[すべてのプログラム] (All Programs)、[Microsoft SQL Server 2008]、[SQL Server Management Studio] の順にクリックします。

2. [データベース] (Databases) を展開します。

3. BLOB ストアを作成するコンテンツ データベースを選択して、[新しいクエリ] (New Query) をクリックします。

4. SQL Server Management Studio で [新しいクエリ] (New Query) をクリックして、クエリ エディターを表示します。

5. クエリ エディターで以下の Transact-SQL コードを入力します。

USE [データベース名]

SELECT * FROM dbo.DatabaseInformation

RBSCollectionId 行と RBSProvider 行が両方とも使用できることを確認します。

 

RBS データ ストアのテスト

1. 構成したコンテンツ データベースでサイトの目的のドキュメント ライブラリを選択します。

2. 1 MB より大きいファイルをアップロードします。

3. RBS データ ストアが含まれるコンピューターで、[スタート] (Start) をクリックし、[コンピューター] (Computer) をクリックします。

4. RBS データ ストアのディレクトリを参照します。

5. ファイルの一覧を参照し、変更日時が最も新しいフォルダー ($FSLOG 以外) を開きます。そのフォルダーで、変更日時が最も新しいファイルを開きます。そのファイルのサイズと内容が、アップロードしたファイルと同じであることを確認します。同じでない場合は、RBS が正しくインストールされて有効になっていることを確認します。

データ ストアのディレクトリ構造は、次の図のようになります。

 

 

NOTE

構成されている MinimumBlobStorageSize より大きいドキュメントをアップロードすると "URL '<ドキュメント ライブラリ>/File' は正しくありません。存在しないファイルまたはフォルダーを参照しているか、または作業中の Web にないページまたはフォルダーを参照している可能性があります。"というエラーが表示される場合は、SQL Server 構成マネージャーを開き、[ファイル I/O ストリーム アクセスに対して FILESTREAM を有効にする] (Enable FILESTREAM for file I/O streaming access) を有効にして、SQL Server (MSSQLSERVER) サービスを再起動します。

 

その他の技術情報

 

 

カテゴリ: 実現方法; SharePoint 2010

投稿日: 2011 年 4 月 22 日午前 9:00

これはローカライズされたブログ投稿です。原文の記事は、「FILESTREAM with SharePoint 2010」をご覧ください。