CodeZine(コードジン)

特集ページ一覧

Windows Azure for Node.jsでキュー、テーブルを操作しよう

Windows Azure 新機能チュートリアル(16)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/07/23 14:00
目次

ビッグデータ管理に優れた「テーブル」

 テーブルは表形式のデータ構造を保存するためのストレージで、いわゆるKVS(キーバリューストア)に分類されます。RDBMSのようにスキーマは必要なく柔軟なデータ構造を表現できる一方、JOINやSORTといった操作はできません。

 表形式のデータ構造のうち、行データのことをエンティティ、カラムに相当するものをプロパティ(Property)と呼びます。プロパティにはパーティションキー(Partition Key)と行キー(RowKey)と呼ばれるシステムプロパティがあり、これらを組み合わせた値がテーブル全体で一意(KVSのキーとなる)である必要があります。

 先ほど同様、テーブルについてもサンプルをベースに解説していきます。

サンプル説明

 簡単な住所録アプリケーションを、テーブルを用いて実装しています。キューと同様の手順でサンプルを実行し「テーブルサンプル」のページを開きます(図3)。

図3 テーブルサンプルの実行画面
図3 テーブルサンプルの実行画面

 名前、住所、電話を入力し[追加]ボタンをクリックするとテーブルにデータが追加されます。また[削除]チェックボックスをオンにして、[削除]ボタンをクリックするとデータを削除できます。

テーブルの作成

 アプリケーションが起動すると最初にテーブルを作成します(リスト7)。

リスト7 テーブルの作成(WebRole1\routes\table.js 6行目~)
//(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のように行います。

リスト8 エンティティの挿入(WebRole1\routes\table.js 35行目~)
// (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)で作成したエンティティを指定しています。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Windows Azure新機能チュートリアル

もっと読む

著者プロフィール

  • WINGSプロジェクト statemachine(statemachine)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5