Python+tweepy+web.py+Azureストレージで作るTwitter連携アプリケーション 4ページ

表/リスト形式のデータを格納できるKey-Valueストア型ストレージ「Tableストレージ」

 続いて、「Tableストレージ」について紹介していこう。Tableストレージはその名の通り、「テーブル(表)」形式でデータを保存する仕組みだ。一般的には「Key-Valueストア」と呼ばれているものに分類されるが、Tableストレージではデータの挿入や更新、削除といったアクセスに「パーティションキー(PartitionKey)」と「行キー(RowKey)」と呼ばれる2つのキーを用いる点が特徴となる。TableもBlobと同様、1つのストレージアカウントで複数のTableが利用可能だ。

 テーブル内に格納されるそれぞれのデータは「エンティティ」と呼ばれ、各エンティティには最大255個の情報を格納することができる。この格納される情報はそれぞれ「プロパティ」と呼ばれる。表の「行」に相当するものが「エンティティ」、「列」に相当するものがプロパティだと考えれば良いだろう(図9)。パーティションキーや行キーもこのプロパティの1つだ。そのほか、「時間情報(Timestamp)」というプロパティもあらかじめ定義されている。

図9 Tableストレージの概念図
図9 Tableストレージの概念図

 パーティションキーと行キーは特別な意味を持つプロパティとなっており、これら2つの値がともに同一であるエンティティは同じテーブル内に重複して存在できない。また、Tableストレージではデータが複数の場所(パーティション)に分散して保存されるが、このとき同じパーティションキーが設定されたエンティティは同じパーティションに格納される。そのため、複数のパーティションキーを対象としたクエリ処理はパフォーマンスが低下する可能性がある。この制限を避けるため、Table内にどのような形でデータを格納するかは事前によく検討しておく必要がある。

 なお、各プロパティには型を指定できる。利用できる型は表5のとおりだ。

表5 Tableストレージで利用できる型
型名 説明
binary 最大64KBのバイナリデータ
bool ブール値
DateTime UTCベースの日付時刻情報
double 64ビット浮動小数点小数
Guid 128ビットのグローバル一意識別子
int 32ビット整数
long 64ビット整数
String 最大64KBのUTF-16文字列

 ここから分かるとおり、Tableストレージでは数値や短めの文字列といった、小さめのデータを格納するものとなっている。もしサイズの大きいデータを保存したい場合はデータ本体をBlobに格納し、そのBlobのキーをTableストレージに格納する、といった運用を行うことになる。

 また、Tableストレージに対して行える操作は表6のとおりだ。「Update Entity」および「Merge Entity」は指定したパーティションキーおよび行キーの組み合わせに該当する既存エンティティを更新する操作だが、前者は指定しないプロパティは削除されるのに対し、後者は無視されて更新されないという違いがある。

表6 Tableストレージに対して実行できる操作
名称 説明
Query Tables アカウント内のテーブルを列挙
Create Table テーブルを新規作成
Delete Table テーブルを削除
Query Entities テーブル内のデータをクエリ
Insert Entity 新しいエンティティをテーブルに挿入
Update Entity 既存のエンティティを置換する形で更新
Merge Entity 既存のエンティティを上書きする形で更新
Delete Entity エンティティを削除

 テーブルに対するクエリ操作については下記のものが行える。

  • 指定したパーティションキーおよび行キーに該当するエンティティを取得
  • 指定した「フィルタ」に該当するエンティティを取得

 「フィルタ」は該当するプロパティを取得するための条件式で、ここで指定した条件に合致するプロパティ値を持つエンティティのみを取得できる。たとえばパーティションキーが「foo」となっているエンティティを取得するには、次のようなフィルタを設定する。

ParitionKey eq "foo"

 複数の条件式を「and」や「or」、「not」といった演算子で組み合わせることも可能だ。たとえばパーティションキーが「foo」で、かつプロパティ「size」が「100以上」となっているエンティティを取得するには、次のようなフィルタを設定する。

ParitionKey eq "foo" and size ge 100

 そのほか、フィルタでは表7の比較演算子が利用できる。

表7 フィルタで利用できる比較演算子
演算子 意味
eq 等しい(equal)
gt より大きい(greater than)
ge 以上(greater than or equal)
lt より小さい(less than)
le 以下(less than or equal)
ne 等しくない(not equal)

 なお、クエリに対しては最長5秒間で、1回のクエリで返されるエンティティには最大1000個という制限が設定されている。もし1回のクエリで該当するエンティティすべてが返せない場合、「継続ヘッダー」というものが返されるので、これを用いて再度クエリ処理を行って続きのエンティティを取得する形となる。