外部 BLOB ストレージのアーキテクチャ

外部バイナリ ラージ オブジェクト (BLOB) ストア プロバイダー (EBS Provider) の導入以前、BLOB ストレージのセマンティクスは、SharePoint ファイルに関連付けられたバイナリ データ ストリームを Microsoft SQL Server コンテンツ サーバーにルーティングし、サイトの構造化データと共有していました。このシナリオでは、SharePoint ファイルで Save コマンドを呼び出すと、Save パスのパーサーが Save コマンドを認識し、ファイル ストリームからメタデータのパーセルを昇格させます。その後、そのファイルに関連付けられた BLOB とともに、メタデータが SQL Server のコンテンツ データベースに保存されます。

ただし、EBS Provider をインストールして構成し、有効にすると、セマンティクスは大きく変化します (図 1 を参照)。ここでは、Web アプリケーションの代わりに中間層のストレージ アクセス スタックが BLOB データ ストリームをルーティングし、EBS Provider を使用して BLOB データを外部 BLOB ストアに保存し、メタデータを返します。このため、EBS Provider はオンデマンドで BLOB を取得できます。重要なのは、外部 BLOB ストアの存在に加えて、SharePoint オブジェクト モデルが EBS Provider のセマンティクスから完全に分離されている点です。この分離によって、既存のアプリケーションおよびサービスは、ストレージ実装にまったくとらわれなくなります。ストレージ アクセス スタックだけが、外部 BLOB ストアの存在およびセマンティクスに関与します。

図 1. 外部 BLOB ストアのアーキテクチャ

EBS プロバイダをインストールした後のアーキテクチャ

EBS Provider は、アンマネージ ISPExternalBinaryProvider というプロバイダー インターフェイスのカスタム実装で、COM コンポーネントとしてストレージ アクセス スタックに統合されます。

プロバイダ インターフェイスは、StoreBinary と RetrieveBinary の 2 つのメソッドを提供します。ストレージ アクセス スタックは、Save コマンドおよび Open コマンドを認識し、これらのコマンドに BLOB ファイルが関連付けられている場合、StoreBinary メソッドと RetrieveBinary メソッドをそれぞれ呼び出します。

BLOB パイプラインの保存 : Save コマンドの使用

Save コマンドに対してアクションすることで、BLOB データを外部データ ストアに保存できます。図 2 に、フロントエンド Web アプリケーションからの Save コマンドがストレージ アクセス スタックから EBS Provider にルーティングされ、外部に保存される仕組み図示します。最後に、その場所のレコードが、コンテンツ データベース内にメタデータとして保存されます。

図 2. Save コマンドを使用した BLOB の格納

データの保存

フロントエンド Web アプリケーションで Save コマンドが呼び出されると、アプリケーションの中間層ロジックが、アンチウイルス チェック、プロパティの昇格、権利の管理、およびその他の前処理作業をはじめとするビジネス ロジック検証を実行します。次にストレージ アクセス スタックが、Save コマンドが BLOB ファイルに対するコマンドであることを認識します。プロバイダ インターフェイスが EBS Provider に要求を渡し、EBS Provider はバイナリ ストリームを外部 BLOB ストアに保存します。

次に EBS Provider は、BLOB ID (BlobId) をインターフェイスに返し、インターフェイスはその ID をストレージ アクセス スタックに渡します。アクセス スタックは、ID と BLOB メタデータをコンテンツ データベースに保存します。

EBS Provider は、外部 BLOB ストアに配置する BLOB ファイルの一意の識別子 ([Out] ppbBinaryId) を返す役割を担当します。

BLOB パイプラインの取得 : Open コマンドの使用

外部 BLOB ストアからの BLOB データの取得は、Save 操作の逆になります。EBS Provider が BLOB に関連付けられているファイルに対する Open コマンドを認識すると、プロバイダ インターフェイス上でメソッドを呼び出し、外部 BLOB ストアからファイルを取得します。図 3 に、ストレージ アクセス スタックがフロントエンド Web アプリケーションからの Open コマンドを使用して、コンテンツ データベースから BLOB ID を取得する仕組みと、その ID を使用して外部 BLOB ストアからバイナリ ストリームを取得する仕組みを図示します。

図 3. Open コマンドを使用した BLOB の取得

データの取得

ストレージ アクセス スタックは、Transact-SQL クエリをコンテンツ データベースに送信して、メタデータおよび BlobId を取得します。さらに戻り値 (BlobId) を EBS Provider に渡し、EBS Provider が ISPExternalBinaryProvider インターフェイスに対して RetrieveBinary メソッドを使用し、外部 BLOB ストアから適切なバイナリ ファイルを取得できるようにします。このメソッドは、ILockBytes インターフェイスをストレージ アクセス スタックに返します。

StoreBinary メソッドと同様に、EBS Provider は取得イベントを記録する役割を担当します。Windows SharePoint Server は、予期せぬ HRESULT の戻り値は記録しますが、それ以外の場合、戻り値が単に S_OK または E_FAIL であるかのように動作します。

EBS Provider エラーは、ストレージ アクセス スタックにより、既知のエラー コードにマップされます。

See Also

概念

Windows SharePoint Services でバイナリ ラージ オブジェクト (BLOB) を外部保存する