ENGLISH

Node.js から 高速な Btrieve 2 API を利用する方法

 

Actian Zen をもっとも高速に活用するために、Zen のネイティブ API である Btrieve 2 API を Node.js から呼び出す方法について解説します。

はじめに

Node.js を使用すればサーバーサイドでも Javascript を使用してプログラムを作成する事ができます。

 

Actian Zen をNode.js から使用する最も簡単な方法は、こちらの FAQ のように ODBC 経由で SQL を使用してアクセスする事です。

 

しかしながら、Actian Zen の大きな特徴である高速性をフル活用するためには、標準 SQL を利用するよりも Zen のネイティブ API である Btrieve 2 API を呼び出した方が有利です。Btrieve 2 API を使用することで、Node.js でも より高速なデータアクセス性能を得ることが出来ます。

 

Btrieve 2 API は C/C++ 向けのライブラリで構成されていますが、Actian 社は SWIG (Simplified Wrapper and Interface Generator) の定義ファイルを提供しているので、他のスクリプト言語や、プログラミング言語からも Btrieve 2 API を利用する事が可能になっています。

 

Node.js から Btrieve 2 API を利用するためには、まず Node.js 用の Btrieve 2 API ライブラリを用意する必要があります。

 

各モジュールの関連図

 

当記事では、Node.js のネイティブアドオンの作成方法と、簡単な Btrieve 2 API 呼び出しサンプルをご紹介します。

 

なお今回は、x64版 CentOS 7.4 及び Ubuntu 18.04.4 LTS を使用して作業の説明を行っています。 それぞれでコマンド操作が異なる場合には明示していますが、特に区別がない場合は、両者共通のコマンド入力となっています。

 

以下の作業では、手持ちの PC にデモ環境を構築し、Btrieve の呼び出しを行う簡単なサンプル Javascript プログラム “bcreate_insert_read_sample2.js” を動かします。

 

bcreate_insert_read_sample2.js は、ここからダウンロードできます。

 

このプログラムは、次の処理を行います。

 

  • 1レコード10バイト(AUTOTIMESTAMP型8バイト+UInt16型の数値2バイト)で構成されるデータを格納できるBtrieveデータファイルを生成します。
  • AUTOTIMESTAMP型8バイトのフィールドは、検索のためにキー(インデックス)を設定します。
  • ループ処理で1~10000までの1万件のデータをファイルに書き込みます。
  • 200件目のデータが書きこまれた時点のAUTOTIMESTAMP型8バイトの値を、後の検索条件に使用するために保存します。
  • データファイルから最後に書き込みのあったレコードを抽出し、記録されている値を表示します。
  • ループ内で保存したタイムスタンプ値を使用して、該当の値を持つレコードを抽出します。

 

サンプルデータベースの構造

1. node-gyp について

Node.js は様々なプラットフォームで動作するため、Btrieve 2 API のようなプラットフォーム固有の機能も、それぞれの環境に合わせた「ネイティブアドオン」を用意してアクセスします。

 

node-gyp は、Node.js 用のネイティブアドオンをビルドするためのツールです。

 

公式ページ
https://github.com/nodejs/node-gyp

 

導入方法に関しては、後ほど説明します。

 

※ node-gyp を動かすためには その他に Python3、C++、および make が必要となります。

2. Node.jsアドオン作成手順

Node.jsアドオン作成の基本的な手順としては、

  1. node-gyp(その他必要となるツール類)をシステムにインストールする
  2. node-gyp configure を実行する
    → アドオンプロジェクトの ビルド用ファイル(makefile等)が生成される
  3. node-gyp build を実行しアドオンをビルドする
  4. Node.js で Btrieve 2 API を利用したプログラムを作成する

という流れになります。

 

それでは、実際に環境を構築していきましょう。

3. 環境構築

最初にOSの環境を最新にします。
(これをしておかないと各種パッケージが正常にインストールできない場合があります)

 

CentOS:

$ sudo yum update

 

Ubuntu:

$ sudo apt update
$ sudo apt upgrade

 

次に、Zen をインストールします。
ここではユーザー “test” を使用して説明します。また、インストール用ファイルは /home/test/ にあると仮定しています。
(ファイル名は、ご入手いただいた実際のファイル名に置き換えて読み進んでください)

 

$ sudo su
# cd /usr/local
# tar -zxf /home/test/Zen-EnterpriseServer-jajp-linux-x86_64-14.11.014.000.tar.gz
# cd actianzen/etc
# ./preinstall.sh
# ./postinstall.sh

 

念のため次のコマンドで動作を確認してください。
Zen エンジンのバージョン情報が表示されれば エンジンは動作しています。

 

# su zen-svc
$ isql demodata
SQL> select @@version
SQL> quit
$ exit

4. Node.js インストール

続いて Node.js をインストールします。

 

CentOS:

# curl -sL https://rpm.nodesource.com/setup_10.x | bash –
# yum remove -y nodejs npm
# yum install -y nodejs
# node -v

 

インストールされた node.js がバージョンを返せばインストールできています。
(こちらの環境では v10.21.0 がインストールされました)

 

Ubuntuの場合は、次の通りです。

 

Ubuntu:

# apt install nodejs
# node -v

 

(こちらの環境では v8.10.0 がインストールされました)

5. サンプル用フォルダの作成

サンプルの作業用として ActianZen ディレクトリを用意し、その中に Swig4、Demo の2つのディレクトリを作成します。

 

# exit
$ cd /home/test
$ mkdir ActianZen
$ cd ActianZen
$ mkdir Swig4
$ mkdir Demo

 

それぞれのディレクトリにファイルを配置していきます。

6. SWIG の導入

C/C++ のライブラリである Btrieve 2 API のライブラリを Javascript から呼び出せるよう、ラッパーライブラリを swig を使って生成します。

 

swig 本体は、 http://www.swig.org/ から最新の ソースファイルをダウンロードしてください。
(Download -> Download Area -> The Latest Release の swig-4.0.2 から入手できます)

 

ダウンロードしたswig-4.0.2.tar.gz は、Swig4 ディレクトリにコピーしておきます。
次に、swig のソースファイルを展開します。

 

$ cd /home/test/ActianZen/Swig4
$ tar -zxf swig-4.0.2.tar.gz
$ cd swig-4.0.2

 

既に環境に古いバージョンの swig が導入されている場合があるので、念のため次のコマンドで削除してください。

 

CentOS:

$ sudo yum erase swig

 

Ubuntu:

$ sudo apt remove swig

 

swig の動作に必要となる php、python3 をインストールします。

 

CentOS:

$ sudo yum install -y php
$ sudo yum install -y python3

 

Ubuntu:

$ sudo apt install php-dev
$ sudo apt install python3-dev

 

環境に合わせた設定を行い、make を実行後、インストールします。

$ ./configure –without-python –without-perl5 –with-php
$ make -j4
$ sudo make install
$ swig -version

 

バージョン情報が表示されれば成功です。

7. ネイティブアドオンのコンパイル

swig の準備ができたので、Node.js 用のネイティブアドオンのコンパイルします。

まずは、Btrieve 2 API の SDK ファイルを展開します。
ここでは Zen-SDK-Btrieve2API-linux-noarch-14.11.014.000.tar.gz は ActianZen/Demo ディレクトリに置かれているものとします。

$ cd /home/test/ActianZen/Demo
$ tar -zxf Zen-SDK-Btrieve2API-linux-noarch-14.11.014.000.tar.gz
$ cd Zen-SDK-Btrieve2API-000-linux-noarch-14.11.014/swig/btrieveJavascript

 

Btrieve 2 API のラッパーファイルをswigで生成します。
(btrieveJavascript_wrap.cxxファイルが作成されます)

$ swig -javascript -node -I../../include -c++ btrieveJavascript.swig

 

最後に Node.js のネイティブアドオンを作成します。

 

アドオン作成のツールである node-gyp をインストールします。

 

CentOS:

$ sudo npm install -g node-gyp

 

Ubuntu:

$ sudo apt install aptitude
$ sudo aptitude install node-gyp

 

これで node-gyp が準備できたので Node.js のネイティブアドオンの作成準備が整いました。

$ node-gyp configure
$ node-gyp build

8. サンプルプログラムの実行

フォルダにアクセスを与えます。
また、Zenのライブラリにもパスを指定しておきます。

 

$ chmod a+rwx .
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/actianzen/lib64

 

サンプル bcreate_insert_read_sample2.js を現在のディレクトリ
/home/test/ActianZen/BtrieveJavascript/Zen-SDK-Btrieve2API-000-linux-noarch-14.11.014/swig/btrieveJavascript
にコピーします。

 

サンプルを実行します。

$ node bcreate_insert_read_sample2.js

 

データファイルが作成される場所は、スクリプトの先頭で次のように定義されています。

btrieveFileName = “/usr/local/actianzen/data/test_cr_ins_read.btr”

 

ファイルは Zen エンジンが読み書きできる場所に作成される必要があります。
※ Zen エンジンの動作アカウントは、ユーザー名 zen-svc、グループ名 zen-data です。

 

また、このサンプルでは最後の処理で作成したデータファイルを削除する処理が含まれていますが、作成されたデータを確認するために、削除処理はコメントアウトしています。

 

作成されたBtrieveファイルをWindows 環境にコピーして Function Executor 等の Zen 付属ツールで書き込まれた内容をご確認下さい。

一覧に戻る

Contactお問い合わせ

お気軽にお問い合わせください。

お問い合わせ

    必須会社名

    個人のお客様は「個人」と入力してください。

    必須お名前
    必須メールアドレス
    必須メールアドレス(確認)
    必須ライセンス ありなし
    ダウンロード目的