Node.js 用 MariaDB Connector

2019年1月31日に MariaDB Connector/Node.js 2.0.3 GA がリリースされました。

MariaDB Connector/Node.js 2.0.3 GA Release Notes

MariaDB Connector/Node.js の GitHub レポジトリはこちらになります。

https://github.com/MariaDB/mariadb-connector-nodejs

今回は MariaDB Connector/Node.js について概要を説明させて頂きたいと思います。

MariaDB Connector/Node.js の特長

MariaDBへのストリーミング

Readable stream から MariaDB Server へ Connector/Node.js 経由で INSERT 文を用いてストリーミングすることができます。

    https.get('https://someContent', readableStream => {
        //readableStream implement Readable, driver will stream data to database 
        connection.query("INSERT INTO myTable VALUE (?)", [readableStream]);
    });
パイプライン

パイプラインを用いてMariaDB Serverからの応答を待つことなく,SQL文を送信することが可能です。

パイプラインに関する詳細はこちらに解説されています(英語)。

バッチ

大量のデータをテーブルにロードする際に,一度にMariaDB Serverに送信することでインポート処理性能を大幅に改善することが可能です。なお,MariaDB Server のバージョンにより,実装が異なっており,MariaDB Server 10.2.7以降では大幅に性能が向上することがベンチマークテストで確認されています。
バッチ(Batch)の詳細は こちら に解説されています。

テスト環境

以下の環境でサンプルコードを実行します。

  • MariaDB Connector/Node.js 2.0.3 GA
  • MariaDB 10.3.13
  • CentOS 7.6.1810

Node.js Connector のインストール

MariaDB Connector/Node.js は npm レポジトリからインストールできます。

$ sudo yum -y install npm
$ npm -install mariadb

サンプル・テーブル

以下のようなサンプルテーブルをtestデータベースに作成します。

CREATE TABLE myTable (
  id int(11),
  note varchar(50),
  PRIMARY KEY (id)
);

サンプルコード

既存のMySQLコネクタと同様にMariaDBに接続可能ですが,mysqlではなく,mariadbパッケージを用います。

const mariadb = require('mariadb');
const pool = mariadb.createPool({
     host: 'localhost',
     user: 'root',
     password: '',
     database: 'test',
     connectionLimit: 5
});

pool.getConnection()
    .then(conn => {

      conn.query("SELECT 1 as val")
        .then((rows) => {
          console.log(rows); //[ {val: 1}, meta: ... ]
          return conn.query("INSERT INTO myTable value (?, ?)", [1, "mariadb"]);
        })
        .then((res) => {
          console.log(res); // { affectedRows: 1, insertId: 1, warningStatus: 0 }
          conn.end();
        })
        .catch(err => {
          //handle error
          conn.end();
        })

    }).catch(err => {
      //not connected
    });

サンプルコードを実行すると以下のような出力となります。

$ node test.js
[ { val: 1 },
  meta: [ { collation: [Object],
      columnLength: 1,
      columnType: 3,
      scale: 0,
      type: 'LONG',
      flags: 129,
      db: [Function: bound getStringProperty],
      schema: [Function: bound getStringProperty],
      table: [Function: bound getStringProperty],
      orgTable: [Function: bound getStringProperty],
      name: [Function: bound getStringProperty],
      orgName: [Function: bound getStringProperty] } ] ]
{ affectedRows: 1, insertId: 0, warningStatus: 0 }

mysqlコマンド(MariaDB monitor)で myTable を確認してみます。

MariaDB [test]> select * from myTable;
+----+---------+
| id | note |
+----+---------+
| 1 | mariadb |
+----+---------+

正常にデータがINSERTされていることが確認できました。

まとめ

今回は新たにリリースされた Node.js 用 connector,MariaDB Connector/Node.js 2.0 GA について説明させて頂きました。Node.js の特性に合わせ,非同期(asynchronous)のクエリ実行が可能となっております。