はじめに
このドキュメントでは、Node.js 環境用のアドオン・モジュール cache.node について説明します。このモジュールには、Node.js 環境で開発されたソフトウェアの Caché データベースに保持されたデータへの高性能アクセス機能が実装されています。
背景
Node.js は、Google の高度に最適化された V8 JavaScript エンジンに基づく JavaScript オペレーティング環境を提供します。多くは、クライアント・コンピュータ上の Web ブラウザのコンテキスト内で実行される JavaScript に慣れています。それに対して Node.js は、主に中間層またはサーバ・サイド (またはその両方) のオペレーティング環境です。
Node.js プロジェクトの明確な目的は、高性能で拡張性の高いネットワーク・インフラストラクチャを簡単に構築できる手段を提供することです。Node.js は、非ブロック型イベント・ベース・アーキテクチャを提供することにより、従来のスレッド・ベースのネットワーク・ソフトウェア (Web サーバなど) との差別化を図っています。
最近の Web サーバの多くは (Nginx や Lighttpd などの最新のイベント・ベース・サーバは明らかな例外として除いて)、1 つのスレッドが各要求専用の処理を行うハイブリッド・マルチプロセス/マルチスレッド・サーバ・アーキテクチャを使用して実装されています。そのスレッドに関連付けられているすべてのリソースは、そのリクエストが処理され、レスポンスがそのクライアントに送信されるまで割り当てられたままです。Node.js アーキテクチャでは、1 つのプロセスが (ノードの) インスタンスごとに使用され、スレッドは、他の場合であればブロックされる処理およびシステム・コールを実行のプライマリ・スレッドに対して非同期に呼び出すことができる手段としてのみ使用されます。Node.js では、すべては非同期に実行されます。そして、Node.js (および Node.js で記述されたソフトウェア) の主要な設計の特徴は、どの関数もブロックせず、Node.js で開始プログラムに処理が完了したことを通知するために使用されるコールバック関数を受け入れるということです。
イベント・ベース・サーバ・アーキテクチャの結果として、他の処理の完了を待機する間、システム・リソース (ヒープ・メモリなど) が専有されることがなくなります。これにより、Node.js を使用して開発されたネットワーク・プログラムでは、システム・リソース、メモリ使用量、および高度な拡張性に関して専有されるフットプリントは非常に小さくなることが主な利点です。
Node.js を使用する開発者は、以下の 2 つのテクノロジ領域を深く理解している必要があります。
-
イベント・ベース・アーキテクチャと非同期処理。
-
JavaScript Object Notation (JSON) を使用して表されるデータ。
高性能な Node.js 環境の主な追加要件は、同様に高性能なデータベース・エンジンです。これは、Caché データベースが格納される場所です。Caché データベースは InterSystems によって提供されます。Caché は成熟したデータベースで、1970 年代終わりの発売以降、継続的な発展と改善を遂げてきた基盤テクノロジです。Caché は、同一の物理データに対して NoSQL アクセス、リレーショナル・アクセス、およびオブジェクト・ベース・アクセスが同時に可能なマルチモデル・データベース機能を提供します。
最も基本的なレベルでは、Caché データベース・エンジンを B-Tree ベースのストレージを提供する NoSQL データベースとみなすこともできますが、重要な違いが 1 つあります。従来の B-Tree データベースでは 1 次元のキー/値型ストレージが実装されていますが、Caché では、多次元の複数キー/値型ストレージ・モデルが使用されています。これにより、高度に構造化された NoSQL データ・リポジトリの基盤が提供されます。Caché 用語では、保存されたキーと値のペア一式をグローバルといい、各ペアをグローバル・ノードといいます。例えば、以下のようになります。
MyGlobal("key1")="value1"
MyGlobal("key2")="value2"
MyGlobal("key3")="value3"
MyGlobal("key1")="value1"
MyGlobal("key1", "key1a")="value1a"
MyGlobal("key1", "key1a, "key1b")="value1b"
MyGlobal("key2")="value2"
MyGlobal("key2", 1)="value21"
MyGlobal("key2", 2)="value22"
MyGlobal("key3")="value3"
MyGlobal("key3", 1, 2, 3)="value3123"
MyGlobal("key3", 1, 3)="value313"
インストール
このセクションでは、事前構築された cache.node モジュールのインストール手順について説明します。
以下のコンポーネントがインストールされている必要があります。
-
Caché インストール
-
Node.js バージョン 0.4.2 以降
すでに Node.js インストールをよく理解しているユーザには、以下の手順が用意されています。この章内の後述のセクションで、インストール手順についてより詳しく説明します。
-
UNIX および関連オペレーティング・システム
使用する Node.js のバージョンに適したバージョンの cache.node (ファイル名を cache.node に変更する) を Node.js /lib/node/ ディレクトリにコピーします。例えば、以下のようになります。
/opt/local/node/lib/node/cache.node
-
Windows
使用する Node.js のバージョンに適したバージョンの cache.node (ファイル名を cache.node に変更する) を Node.js ホーム・ディレクトリにコピーします。例えば、以下のようになります。
C:\Program Files\nodejs\cache.node
Node.js は多数の UNIX プラットフォームで使用できます。バージョン 0.6 で、Windows のネイティブ・サポートが追加されました。
UNIX と Windows どちらの場合も、Caché モジュールの名前には Node.js の .node 拡張子が使用されます。InterSystems が提供するキットでは、特定の Node.js バージョンで使用すべきモジュールが名前で示されています。例えば、Node.js バージョン 0.12 で使用すべきモジュールには cache0120.node という名前が付けられています。既存の Node.js ソフトウェアの 'require' ステートメントを変更しなくてもよいように、バージョン固有の名前を導入前に cache.node に変更できます。以下のバージョンを使用できます。
-
Node.js バージョン 0.4.x: cache.node
-
Node.js バージョン 0.6.x: cache061.node
-
Node.js バージョン 0.8.x: cache082.node
-
Node.js バージョン 0.10.x: cache0100.node
-
Node.js バージョン 0.12.x: cache0120.node
-
Node.js バージョン 4.2.x: cache421.node
-
Node.js バージョン 5.x.x: cache550.node
-
Node.js バージョン 6.x.x: cache610.node
この章の残りの部分では、ホストする Node.js 環境での cache.node の作業インストールの作成に関する事項を説明します。
UNIX および関連オペレーティング・システム
モジュール cache.node は、実際は標準の UNIX 共有オブジェクト (cache.so など) ですが、通常とは異なる Node.js 固有のファイル拡張子が付きます。ノード・ファイル・システムの以下の場所に cache.node をコピーします。
.../node/lib/node/
例えば、以下のようになります。
/opt/local/node/lib/node/cache.node
認識済みのライブラリ・パスにモジュールを配置すると、JavaScript ファイルにフル・パスを指定せずに済みます。例えば、JavaScript に以下のように記述できます。
var cachedb = require('cache');
以下の例のようなハードコーディングされたパスは必要ありません。
var cachedb = require('/opt/local/build/default/cache');
Windows
モジュール cache.node は、実際は標準の Windows DLL (cache.dll など) ですが、通常とは異なる Node.js 固有のファイル拡張子が付きます。標準の Windows インストーラ (Node.js Group が提供) は通常、Node.js ソフトウェアを C:\Program Files\nodejs に配置します。この場所は通常、インストール・メカニズムによって Windows PATH 環境変数に追加されます。そうでない場合は、手動で追加します。また、NODE_PATH 環境変数も設定する必要があり、この値を Node.js のインストール・ディレクトリに設定する必要があります。例えば、以下のようになります。
NODE_PATH=C:\Program Files\nodejs
NODE_PATH 環境変数に指定した場所に cache.node をコピーします。
C:\Program Files\nodejs
認識済みの Node.js パスにモジュールを配置すると、JavaScript ファイルにフル・パスを指定せずに済みます。例えば、JavaScript に以下のように記述できます。
var globals = require('cache');
以下の例のようなパスのハードコーディングは必要ありません。
var globals = require('/Program Files/nodejs/cache');
var globals = require('c:/Program Files/nodejs/cache');