COM 構造化ストレージ( COM構造化ストレージまたはOLE構造化ストレージとも呼ばれる) は、MicrosoftがWindows オペレーティング システムの一部として開発した、階層データを 1 つのファイル内に格納するテクノロジです。厳密に言えば、構造化ストレージという用語は、準拠する実装が提供する必要のある COMインターフェイスのセットを指し、特定の実装や特定のファイル形式を指すものではありません (実際、構造化ストレージの実装では、データをファイルに格納する必要はまったくありません)。構造化ストレージは、データの階層構造を提供するだけでなく、データ アクセスに対して限定的なトランザクションサポートを提供する場合もあります。Microsoft は、トランザクションをサポートする実装と、サポートしない実装 (シンプル モードストレージと呼ばれます。後者の実装は、パフォーマンスは優れていますが、他の点でも制限があります) を提供しています。
構造化ストレージはMicrosoft Officeアプリケーションで広く使用されていますが、新しいリリース ( Office 2007以降)では、デフォルトでXMLベースのOffice Open XMLが使用されます。また、COM と関連する OLE (Object Linking and Embedding) テクノロジの両方において重要な部分です。構造化ストレージのその他の注目すべきアプリケーションには、SQL Server、Windows シェル、および多くのサードパーティ製CADプログラムがあります。
モチベーション
構造化ストレージは、複数のデータ オブジェクトを 1 つのファイルに格納することに伴う固有の問題に対処します。ファイル内に保持されているオブジェクトのサイズが更新によって変更されると、問題が 1 つ発生します。ファイルの読み取り/書き込みを行うアプリケーションが、ファイル内のオブジェクトが特定の順序のままであることを想定している場合、ファイル内のそのオブジェクトの表現に続くすべてのものを、オブジェクトが大きくなる場合にスペースを確保するために後方にシフトするか、オブジェクトが小さくなる場合に残りのスペースを埋めるために前方にシフトする必要があります。ファイルが大きい場合、これはコストのかかる操作になる可能性があります。もちろん、この問題にはさまざまな解決策がありますが、多くの場合、アプリケーション プログラマーはバイナリ ファイル形式などの低レベルの詳細を扱いたくありません。
構造化ストレージは、インターフェイス で表されるストリームと呼ばれる抽象化を提供しますIStream。ストリームは概念的にはファイルに非常に似ており、IStreamインターフェイス はファイル入出力に似た読み取りおよび書き込みメソッドを提供します。ストリームは、実装に応じて、メモリ内、ファイル内、別のストリーム内などに存在します。もう 1 つの重要な抽象化は、インターフェイス で表されるストレージです。ストレージは概念的には、ファイル システム上のディレクトリIStorageに非常に似ています。ストレージには、ストリームやその他のストレージを含めることができます。
アプリケーションが複数のデータ オブジェクトを 1 つのファイルに永続化する場合、IStorageそのファイルの内容を表す を開き、各オブジェクトを 1 つの に保存する方法がありますIStream。後者を実現する 1 つの方法は、標準の COM インターフェイスを使用することですIPersistStream。OLE は、ドキュメント内にオブジェクトを埋め込むためにこのモデルに大きく依存しています。
形式
Microsoft の実装では、複合ファイルと呼ばれるファイル形式が使用され、広く導入されている構造化ストレージの実装はすべてこの形式の読み取りと書き込みを行います。複合ファイルは、ストレージとストリームを表すためにFATのような構造を使用します。ファイルのチャンクはセクターと呼ばれ(これらは基礎となるファイル システムのセクターに対応する場合と対応しない場合があります)、新しいストリームを追加したり既存のストリームのサイズを大きくしたりするために必要に応じて割り当てられます。ストリームが削除または縮小されて未割り当てのセクターが残った場合、それらのセクターは新しいストリームに再利用できます。
以下のアプリケーションはOLE構造化ストレージ(複合ドキュメント形式)を使用します。
- Microsoft Office 97 – 2003ドキュメント:
- Word文書 (.DOC、.DOT)
- Excelスプレッドシート (.XLS、.XLT)
- PowerPointプレゼンテーション (.PPT、.POT)
- 発行者ファイル (.PUB)
- Visioファイル (.VSD)
- プロジェクトファイル (.MPP)
- Microsoft PhotoDrawファイル (.MIX)
- Microsoft Outlookファイル (.MSG)
- Windows インストーラーファイル (.MSI、.MSP、.MST)
- Microsoft Picture It! / Microsoft デジタル イメージファイル (.MIX)
- Internet Explorer RSS フィードWindows RSS プラットフォームファイル (.feed-ms)
- Windows 7 付箋 (.SNT)
- Windows 7 ジャンプリスト ファイル
- サムズ.db
- Microsoft SQL 2000 Server DTSパッケージ
- オートデスクRevit
- オートデスク インベンター
- フラッシュピックス
- アルティウムデザイナー
ネイティブ構造化ストレージ
Windows 2000のベータ テスト段階では、構造化ストレージ ドキュメント ( Microsoft Office のバイナリ形式やWindows エクスプローラーがサムネイルをキャッシュするために使用するファイルなど) を格納するためのネイティブ構造化ストレージ( NSS ) という機能が含まれていました。各ストリームは、ドキュメントを構成する各ストリームが別のNTFSデータ ストリームに格納されていました。これには、通常の構造化ストレージ ドキュメント内のストリームを NTFS データ ストリームに自動的に分割したり、その逆を行ったりするユーティリティが含まれていました。ただし、他の OS コンポーネントとの非互換性のため、ベータ 3 以降この機能は取り下げられ、NSS ファイルはすべて単一のデータ ストリーム形式に自動的に変換されました。[1]thumbs.db
実装
- Microsoft .NET の場合:
- OpenMCDF – OLE 構造化ストレージ ファイルにアクセスするための無料の .NET コンポーネント (MPL ライセンス)。
- Linuxの場合:
- GNOME 構造化ファイル ライブラリ – Microsoft 構造化ストレージ ファイルを読み取ることができます。
- ポール。
- Window/MacOSX/Linux 向けクロスプラットフォーム C++:
- POLE v3以上。
- Javaの場合:
- POIFS – Apache POIの一部である、OLE 2 複合ドキュメント形式の Java 実装。
- Perlの場合:
- LAOLA バイナリ構造
- JavaScript の場合:
- js-cfb – OLE 2 複合ドキュメント形式の JavaScript 実装。
- Pythonの場合:
- Compoundfiles – Microsoft Compound File Binary (CFB) 形式の Python 実装。
参考文献
- ^ 「ネイティブ構造化ストレージとは何か?」。2007 年 9 月 27 日時点のオリジナルよりアーカイブ。2007 年 12 月 3 日閲覧。
外部リンク
- 公式サイト
- オープン仕様: 複合ファイルバイナリファイル形式
