はじめに
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
文を用いてストリーミングすることができます。
1 2 3 4 |
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 レポジトリからインストールできます。
1 2 |
$ sudo yum -y install npm $ npm -install mariadb |
サンプル・テーブル
以下のようなサンプルテーブルをtest
データベースに作成します。
1 2 3 4 5 |
CREATE TABLE myTable ( id int(11), note varchar(50), PRIMARY KEY (id) ); |
サンプルコード
既存のMySQLコネクタと同様にMariaDBに接続可能ですが,mysql
ではなく,mariadb
パッケージを用います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 }); |
サンプルコードを実行すると以下のような出力となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ 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 を確認してみます。
1 2 3 4 5 6 |
MariaDB [test]> select * from myTable; +----+---------+ | id | note | +----+---------+ | 1 | mariadb | +----+---------+ |
正常にデータがINSERTされていることが確認できました。
まとめ
今回は新たにリリースされた Node.js 用 connector,MariaDB Connector/Node.js 2.0 GA について説明させて頂きました。Node.js の特性に合わせ,非同期(asynchronous)のクエリ実行が可能となっております。