ビッグデータ管理に優れた「テーブル」
テーブルは表形式のデータ構造を保存するためのストレージで、いわゆるKVS(キーバリューストア)に分類されます。RDBMSのようにスキーマは必要なく柔軟なデータ構造を表現できる一方、JOINやSORTといった操作はできません。
表形式のデータ構造のうち、行データのことをエンティティ、カラムに相当するものをプロパティ(Property)と呼びます。プロパティにはパーティションキー(Partition Key)と行キー(RowKey)と呼ばれるシステムプロパティがあり、これらを組み合わせた値がテーブル全体で一意(KVSのキーとなる)である必要があります。
先ほど同様、テーブルについてもサンプルをベースに解説していきます。
サンプル説明
簡単な住所録アプリケーションを、テーブルを用いて実装しています。キューと同様の手順でサンプルを実行し「テーブルサンプル」のページを開きます(図3)。
名前、住所、電話を入力し[追加]ボタンをクリックするとテーブルにデータが追加されます。また[削除]チェックボックスをオンにして、[削除]ボタンをクリックするとデータを削除できます。
テーブルの作成
アプリケーションが起動すると最初にテーブルを作成します(リスト7)。
//(1)テーブルクライアントの作成 var client = azure.createTableService( azure.ServiceClient.DEVSTORE_STORAGE_ACCOUNT, azure.ServiceClient.DEVSTORE_STORAGE_ACCESS_KEY, azure.ServiceClient.DEVSTORE_TABLE_HOST); //(2)テーブルの作成 client.createTableIfNotExists(TABLE_NAME, function(err, created) { ... } });
(1)はテーブル用クライアントの作成をしています。BLOB、キューの場合と特に違いありません。(2)のcreateTableIfNotExistメソッドでテーブルを作成します。第1引数に作成するテーブル名、第2引数にはコールバック関数を指定します。コールバック関数の変数はキュー作成時と同様です。
エンティティの挿入
入力されたデータをテーブルに挿入します。テーブルでは、これら行データのことをエンティティとは呼びます。また、カラムに相当するものをプロパティと呼びます。RDBMSのようにスキーマはなく、最大255個までのプロパティかつ合計が1MBを超えないようなデータを扱うことができます。エンティティの挿入はリスト8のように行います。
// (1)エンティティの定義 var entity = { PartitionKey : 'pkey', // パーティションキー RowKey : uuid(), // 行キ- name : req.body.name, // 名前 address : req.body.adress, // 住所 tel : req.body.tel // 電話番号 }; // (2)エンティティの挿入 client.insertEntity(TABLE_NAME, entity, function(err) { ... });
(1)はテーブルに挿入するエンティティを定義しています。先ほども説明したとおり、エンティティにはパーティションキーと行キーと呼ばれるシステムプロパティを定義しておく必要があります。パーティションキーと行キーは、テーブル内で一意の必要があります。逆に言うとパーティションキーと行キーで個別にエンティティを識別することができます。
この例では、パーティションキーは固定文字列「pkey」、行キーにはUUIDを生成して指定し一意性を保っています。残りのname/address/telはユーザーが定義したプロパティで、フォームから入力されたデータを設定しています。
(2)のinsertEntityメソッドでエンティティを挿入します。第1引数にテーブル、第2引数に(1)で作成したエンティティを指定しています。