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)のクエリ実行が可能となっております。
