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ストレージの概念図 |
パーティションキーと行キーは特別な意味を持つプロパティとなっており、これら2つの値がともに同一であるエンティティは同じテーブル内に重複して存在できない。また、Tableストレージではデータが複数の場所(パーティション)に分散して保存されるが、このとき同じパーティションキーが設定されたエンティティは同じパーティションに格納される。そのため、複数のパーティションキーを対象としたクエリ処理はパフォーマンスが低下する可能性がある。この制限を避けるため、Table内にどのような形でデータを格納するかは事前によく検討しておく必要がある。
なお、各プロパティには型を指定できる。利用できる型は表5のとおりだ。
| 型名 | 説明 |
|---|---|
| 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」は指定したパーティションキーおよび行キーの組み合わせに該当する既存エンティティを更新する操作だが、前者は指定しないプロパティは削除されるのに対し、後者は無視されて更新されないという違いがある。
| 名称 | 説明 |
|---|---|
| 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の比較演算子が利用できる。
| 演算子 | 意味 |
|---|---|
| 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回のクエリで該当するエンティティすべてが返せない場合、「継続ヘッダー」というものが返されるので、これを用いて再度クエリ処理を行って続きのエンティティを取得する形となる。