Node.js で Microsoft Azure テーブル ストレージを管理する方法
このブログでは、Node.js と Microsoft Azure Table Storage の使用方法について説明します。オープンソースソリューション(OSS)は、プラットフォームに依存しないアプリケーションやクラウドアプリケーションの実装に非常に適しています。Node.jsは、このようなクラウドアプリケーションの実際の実装で広く使用されています。
このブログでは、Node.js と Microsoft Azure Table Storage の使用方法について説明します。オープンソースソリューション(OSS)は、プラットフォームに依存しないアプリケーションやクラウドアプリケーションの実装に非常に適しています。Node.jsは、このようなクラウドアプリケーションの実際の実装で広く使用されています。
Node.jsは、開発のための最も人気のある成長プラットフォームの1つです。 私は、Node.js とMicrosoft SQL Serverに関する 2 つの記事から始めて、Node.js 専用の一連の投稿を開始しました。いくつかのブログで、Microsoft Azure Storageで Node.js を使用する方法について詳しく説明します。
What Is Azure Storage?
Microsoft Azureストレージサービスを使用すると、Microsoft Cloud環境との間でNON RELATIONAL データを保存/取得できます。(リレーショナル データの場合は、SQL Azure サービスが使用されます)。
Microsoft Azure Storage では、データを 4 つの異なる形式 (v.i.z. Blob、Tables and Queues、File Storage (プレビュー段階)) で保存できます。上記のデータの取得/保存は、RESTfulな方法で行われます。
- BLOB ストレージには、ファイル データが格納されます。BLOB には、ドキュメント、メディア ファイル、アプリケーション インストーラーなど、任意の種類のテキストまたはバイナリ データを指定できます。
- テーブル ストレージには、構造化されたデータセットが格納されます。テーブル・ストレージは、NoSQLのキー属性データ・ストアであり、大量のデータへの迅速な開発と高速アクセスを可能にします。
- キューストレージは、ワークフロー処理とクラウドサービスのコンポーネント間の通信に信頼性の高いメッセージングを提供します。
- ファイルストレージは、標準のSMB 2.1プロトコルを使用して、レガシーアプリケーション用の共有ストレージを提供します。Azure 仮想マシンとクラウド サービスは、マウントされた共有を介してアプリケーション コンポーネント間でファイル データを共有でき、オンプレミス アプリケーションはファイル サービス REST API を介して共有内のファイル データにアクセスできます。
この記事では、Node.js を使用して Azure Table サービスを処理する方法に焦点を当てています
テーブルストレージ
Azure Table Storage サービスには、大量の構造化データが格納されます。このサービスは、Azure クラウドの内外からの認証された呼び出しを受け入れる NoSQL データストアです。
Table service には、次のコンポーネントが含まれています。
テーブルエンティティ:
テーブル・エンティティは、テーブルに格納されるデータの単位を表し、一般的なリレーショナル・データベース・テーブルの行に似ています。各エンティティは、プロパティのコレクションを定義します。各プロパティは、名前、値、および値のデータ型によって定義されるキーと値のペアです。エンティティは、プロパティ コレクションの一部として次の 3 つのシステム プロパティを定義する必要があります。
- PartitionKey– PartitionKey プロパティは、エンティティが属するパーティションを識別する文字列値を格納します。これは、同じ PartitionKey 値を持つエンティティが同じパーティションに属していることを意味します。パーティションは、後で説明するように、テーブルのスケーラビリティに不可欠です。
- RowKey– RowKey プロパティは、各パーティション内のエンティティを一意に識別する文字列値を格納します。
- Timestamp– Timestamp プロパティは、エンティティのトレーサビリティを提供します。タイムスタンプは、エンティティが最後に変更された時刻を示す DateTime 値です。タイムスタンプは、エンティティのバージョンと呼ばれることもあります。タイムスタンプの変更は無視されます。これは、テーブル・サービスがすべての挿入操作と更新操作でこのプロパティの値を保持するためです。
デザインでは PartitionKey、RowKey を検討してください。PartitionKey と RowKey はプライマリ インデックスと考えてください。

テーブルパーティション:
Azure テーブルは、効率的なクエリを可能にするキーを使用し、テーブル サービスがテーブルを複数のサーバーに分散する時期が来たと判断した場合に、1 つ (PartitionKey) を負荷分散に使用できます。テーブルに指定されたスキーマがありません。
パーティションは、同じ PartitionKey 値を持つエンティティのコレクションを表します。パーティションは常に 1 つのパーティション サーバーから提供され、各パーティション サーバーは 1 つ以上のパーティションを提供できます。
Azure テーブル ストレージの処理
さまざまな NodeJS パッケージを使用して、Azure Table Storage を処理できます。この投稿では、azureノード パッケージとazure-table-nodeノード パッケージについて説明します。
- Microsoft Azure SDK for Node.js
Microsoft Azure SDK for Node.js の公式版です。このプロジェクトは、Microsoft Azure サービスの使用と管理を容易にする Node.js パッケージを提供します。
次に示すスニペットは、Microsoft Azure SDK for Node.js を使用して Azure Table サービスを管理する方法を示しています。
これは簡単にできます。なぜならAzure SDKはまず環境変数を使って資格情報を探すからです。魔法環境変数の名前はAZURE_STORAGE_ACCOUNTandAZURE_STORAGE_ACCESS_KEYです。
- テーブル サービスの作成
環境変数を使用して資格情報を設定する
var azure = require('azure');
//using enviroment variables for credentials
var tableService = azure.createTableService(); // implicitly use env variables
tableService = azure.createTableService(
process.env.AZURE_STORAGE_ACCOUNT,
process.env.AZURE_STORAGE_ACCESS_KEY); // explicit
ローカル変数を使用して資格情報を明示的に設定する
var accessKey = '[accountKey]'; var storageAccount = '[accountName]'; var tableService = azure.createTableService(accessKey, storageAccount); // explicit
- Insert an entity
var tableService = azure.createTableService();
//insert an entity
var task1 = {
PartitionKey : 'myPartitionKey',
RowKey: '1',
Description: 'Row description',
DueDate: new Date(2011, 12, 14, 12)
};
tableService.insertEntity('tasktable', task1, function(error){
if(!error){
// Entity inserted
});
- クエリ エンティティ
//query an entity
var tableService = azure.createTableService();
tableService.queryEntity('demotable', 'myPartitionKey', '1', function(error, serverEntity){
if(!error){
// Entity available in serverEntity variable
}
});
- azure-table-node:
これは、以下をサポートする Node.js 用の簡略化された Azure Table Storage クライアント ライブラリです。
- テーブルの作成、削除、および一覧表示
- エンティティの作成、更新、クエリ、削除
- バッチ操作のサポート
- SAS (Shared Access Signature) を生成し、認証に使用する
次のコード サンプルは、azure-table-node モジュールを使用して Azure Table Storage を操作する方法を示しています
- Set Azure Storage credentials
var azureTable = require('azure-table-node')
//set azure storage credentials
azureTable.setDefaultClient({
accountUrl: 'http://[accountName].table.core.windows.net/',
accountName: '[accountName]',
accountKey: '[accountKey]'
});
- Create an Azure Table
//create azure table
app.get("/createTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.createTable('testtable', function (err, data) {
});
client.insertEntity('testtable', {
PartitionKey: 'tests',
RowKey: '1',
value1: 'ABCDEFG'
},
function (err, data) {
res.write("Got error :-( " + err);
});
res.end("Table created.");
});
- Azure テーブルの表示
//display an azure table
app.get("/displayTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.queryEntities('testtable', {
query: azureTable.Query.create('PartitionKey', '==', 'tests')
},
function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
var json = JSON.stringify(data);
res.writeHead(200, { 'Content-Type': 'text/plain' })
res.end("Table displayed: " + json);
});
});

- すべての Azure テーブルを一覧表示する
//list all azure tables
app.get("/listTables", function (req, res) {
var client = azureTable.getDefaultClient();
client.listTables(function (err, data, continuation) {
if (err) {
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.write("Got error :-( " + err);
res.end("");
return;
}
res.writeHead(200, { 'Content-Type': 'text/plain' })
for (var i = 0; i < data.length; i++) {
res.write("Table[" + i + "]: " + data[i] + " " );
}
res.end("Tables listed." + data);
});
});

- Azure テーブルの削除
//delete azure table
app.get("/deleteTable", function (req, res) {
var client = azureTable.getDefaultClient();
client.deleteTable('testtable', function (err, data) { });
res.end("Table testtable has been deleted.");
});

Azure Table Services と Node については、さらに多くのことを学ぶ必要があります。 テーブル・ストレージの機能は、増え続けています。この投稿は、開始方法の紹介にすぎず、Azure テーブルの基本ケースと最も一般的なNode.jsモジュールについて説明します。Microsoft Azureの経験がないJavaScript開発者と、JavaScriptやNode.jsの経験が少ないAzure開発者の両方にとって便利です。
Microsoft Azure Platform の開発者は、Table Storage のしくみと、使い慣れたリレーショナル データベースとの違いについて理解しておく必要があります。テーブルストレージがどのように機能するかを知ることは、それが特定の要件に適しているかどうかを判断するのに役立ちます。
ソースコードはGitリポジトリからダウンロードできます。

If you want more information about how to use Microsoft Azure Storage & Node.js feel free to contact me at mmateev@infragistics.com
Node.js、Microsoft Azure、Azure Bootcamp Bulgariaなどの関連イベントの詳細については、Twitterでフォローしたり@mihailmateev Facebook、Google+、LinkedIn @Infragistics Infragistics Friends User Groupで連絡を取り合ったりすると知ることができます。