Object Storage Service (OSS) は、データをフラットな名前空間内のオブジェクトとして保存します。各オブジェクトは一意キー(オブジェクト名)で識別され、ファイルパスではありません。一方、ファイルシステムは階層的なディレクトリツリーでデータを整理し、ファイルをその場で直接変更できます。この根本的な違いを理解することで、OSS を適切に活用でき、ファイルシステムの前提をオブジェクトストレージに誤って適用することを防げます。
OSS とファイルシステムの違い
以下の表では、2 つのストレージモデルを 4 つのディメンションで比較しています。
| OSS | ファイルシステム | |
|---|---|---|
| データモデル | 分散型オブジェクトストレージシステム内で、データをキーと値のペアとして保存します。各オブジェクトには一意キー(オブジェクト名とも呼ばれます)があります。 | 階層的なディレクトリ構造(ツリー)でデータを整理します。 |
| データ取得 | キーによるオブジェクトの取得を行います。OSS はフラットな名前空間を使用しており、test1/test.jpg という名前のオブジェクトは、test1 という名前のディレクトリ内に格納されているわけではありません。test1/test.jpg という文字列は、ストレージ構造上 example.jpg と何ら変わりません。異なるキーを持つオブジェクトへのリクエストは、同程度のリソースを消費します。 | ディレクトリツリーを辿ってファイルを検索します。test1/test.jpg にアクセスするには、まず test1 ディレクトリに入り、その後ファイルを読み込みます。 |
| 強み | 多数の同時操作をサポートします。画像、動画、ドキュメントなどの大量の非構造化データの保存および処理に最適化されています。 | ファイルを指定オフセット位置でその場で変更したり、末尾から切り詰めたりできます。リネーム、移動、削除などのフォルダー操作がネイティブで動作します。 |
| 制限事項 | オブジェクトは変更できません。コンテンツの変更には特定の API オペレーションが必要であり、結果として生成されるオブジェクトは、通常のアップロードで作成されたオブジェクトとは異なるタイプになります。たとえ 1 バイトの変更でも、オブジェクト全体を再アップロードする必要があります。ディレクトリ操作の模倣はコストが高くなります。たとえば、test1 から test2 へのディレクトリ名変更は、キーが test1/ で始まるすべてのオブジェクトをコピーし、それぞれのコピーのキーを test2/ プレフィックスに変更する処理を伴います。これにより、帯域幅、ストレージ、計算リソースが大幅に消費されます。このような操作は実行しないことを推奨します。 | パフォーマンスは基盤となるデバイスに制約されます。深くネストされたディレクトリ内のファイルへのアクセスは、より多くのリソースを消費し、時間がかかります。 |
OSS を使用するタイミング
OSS は、画像、動画、ドキュメントなどの大量の非構造化データの保存および処理に最適化されています。ワークロードが以下のいずれかのパターンに該当する場合、OSS が適しています。
OSS をファイルシステムのドロップイン置き換えとして使用しないでください。ワークロードが頻繁なその場での編集や、深い階層のディレクトリ操作を必要とする場合は、ファイルシステムの方が適した選択肢です。ファイルに類似したアクセスパターンで OSS を使用する必要がある場合は、パフォーマンスとコストを予測可能に保つため、読み取り、書き込み、削除の操作に限定してください。
OSS の概念とファイルシステムにおける対応関係
以下の表では、OSS の用語をファイルシステムにおける最も近い概念にマップしています。
一部の OSS の概念(リージョン、エンドポイント、AccessKey)には、ファイルシステム上の直接的な対応がありません。逆に、マルチレベルのディレクトリは OSS には存在しません。
| OSS | ファイルシステムにおける対応概念 |
|---|---|
| オブジェクト | ファイル |
| バケット | ホームディレクトリ |
| リージョン | — |
| エンドポイント | — |
| AccessKey | — |
| — | マルチレベルディレクトリ |
| GetService | ホームディレクトリの一覧表示 |
| GetBucket | ファイルの一覧表示 |
| PutObject | ファイルの作成 |
| AppendObject | 既存ファイルへのデータ追加 |
| GetObject | ファイルの読み取り |
| DeleteObject | ファイルの削除 |
| — | ファイル内容の変更 |
| CopyObject(同一のソースおよび送信先) | ファイル属性の変更 |
| CopyObject(異なるソースおよび送信先) | ファイルのコピー |
| Rename | ファイルのリネーム |