ブロブ
ブロブ(Blob=Binary Large Object)という名称からも分かるように、大容量のバイナリデータを保存します。例として、写真や動画などを保存することができます。現在のCTP版では、最大50GBの容量が用意されています。REST APIを使用してアクセスします。
ブロブの構造は、ファイルシステムによく似たツリー構造となっています。コンテナ、ブロブ、ブロックの各要素によって構成されています。
コンテナは、ファイルシステムで言うフォルダに相当します。フォルダに複数のファイルを格納できるように、コンテナにも複数のブロブを格納することができます。ただし、コンテナにコンテナを入れることはできません。ポリシーを設定することができ、アクセスするユーザーを制限したり、書き込みを制限することも可能です。また、最大8KBまでのメタデータを設定することができます。
ブロブは、ファイルシステムで言うファイルに相当します。ブロブにもメタデータを設定することができます。1回のアップロードで転送可能なブロブの最大容量は64MBとなっています。それ以上のサイズのデータをアップロードする場合には、ブロック単位に分割する必要があります。各ブロックにはIDが振られ、並列アップロードやリトライ処理が可能です。受信したストレージ側でIDにより並べ直され、一つのブロブとして構築されます。
テーブル
テーブルは、簡単に言えば、非リレーショナルのデータベースです。リレーションを持たない表形式でデータを保存します。REST APIに加え、ADO.NET Data ServicesのクライアントライブラリやLINQによるアクセスにも対応しています。
ストレージ上に作成できるテーブルの数には制限がなく、任意の名前を付けることができます。テーブルサイズにも制限はありません。
テーブルの構造は表形式となっており、エンティティとプロパティで構成されています。行がエンティティを、列がプロパティを意味します。エンティティの数に制限はありません。エンティティは、最大255個までプロパティを持つことができます。このうち3つ(PartitionKey、RowKey、Timestamp)はシステム予約プロパティとして定義されています。各プロパティは<名前、プロパティの型>
のペア形式で保存されます。
システム予約プロパティの詳細は次のとおりです。
プロパティ | 内容 |
PartitionKey | パーティションキー。システムでエンティティの分散配置を行うのに使用します。 |
RowKey | パーティション内での一意のID。PartitionKeyとRowKeyの2つのプロパティによって、テーブル内でエンティティの一意となるキーを構成します。 |
Timestamp | エンティティの最終書き込み時刻をシステムが記録します。読み取り専用。 |
基本的にはデータを格納するだけのブロブと比較すると、テーブルはもっと複雑なデータを扱うことができます。とはいえ、リレーショナルデータベースではないので、SQLで言うJOINや外部キーの考え方はありません。そのため、既存のアプリケーションをクラウド化する場合には、データストレージとして何を選択するかをよく考慮する必要があるでしょう。シンプルにブロブか、構造化データを扱うテーブルか、リレーションシップを含めたもっと複雑なデータを扱えるMicrosoft SQL Azureか、それぞれの特性や構造をふまえて選択することが必要となるでしょう。
キュー
上記の2つのストレージとは目的が異なり、WebロールとWorkerロールのインスタンス間の非同期のメッセージ交換のために使用します。REST APIを使用してアクセスします。
構造はキューとメッセージで成り立っています。キューはメッセージを管理します。メッセージ数に上限はなく、各メッセージは最大8KBです。キューという名前が示すように、FIFO(First-In First-Out)の方式で、メッセージを処理します。
Windows Azure Storageへのアクセス方法
Windows Azure Storageへアクセスする方法として、現時点では主に2種類の方法があります(テーブルの場合には、さらにADO.NET Data Servicesを使用する方法もあります)。
- 直接、REST APIを使用する
- Windows Azure SDKに含まれるStorageClientプロジェクトのライブラリを使用する
Windows Azure Storageへのアクセスは、基本はREST APIを用いて行います。「REST API Reference for Windows Azure Storage Services」から、REST APIの仕様を確認することができます(現在のところ、英文のみです)。
とはいえ、(英文の)REST APIリファレンスを、自分で読み解き、実装するというのは少し面倒だ、もっと簡単にアクセスしたいと思われる読者もおられるでしょう。そのために、Windows Azure SDKのサンプルプログラムの中にある、StorageClientプロジェクトがあります。このStorageClientプロジェクトは、Windows Azure Storageへのアクセスを提供するクラスライブラリです。それで.NET Framework環境であれば、このライブラリを使用することにより、より簡単にWindows Azure Storageへアクセスすることができます。
Windows Azure SDKには、いくつものサンプルプロジェクトが含まれていますが、その一つがStorageClientプロジェクトです。これは、Windows Azure StorageへのアクセスのためのREST APIをラップしたC#で書かれたクラスライブラリです。このライブラリを使用することにより、開発者はREST APIを意識することなく、より簡単にWindows Azure Storageへアクセスすることができるようになります。
ただし、執筆時点では、このライブラリはあくまでサンプルという位置づけとなっています。今後、このようなWindows Azure Storageへのアクセスを提供するライブラリが、正式にWindows Azure SDKに含まれる可能性は高いでしょう。
今回のサンプルプログラムでは、StorageClientプロジェクトではなく、REST APIを使用した方法を紹介します。