---
title: "Node.js 用 MariaDB Connector"
publish_date: 2019-03-19
updated_date: 2023-10-12
author: "MariaDB"
tags:
  - name: "Connector"
    url: "/ja/resources/blog/tag/connector-ja.md"
---

# 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](https://staging-mdb.com/kb/en/library/mariadb-connector-nodejs-203-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文を送信することが可能です。

[![](https://github.com/MariaDB/mariadb-connector-nodejs/raw/master/documentation/misc/pip.png)](https://github.com/MariaDB/mariadb-connector-nodejs/blob/master/documentation/misc/pip.png)

パイプラインに関する詳細は[こちら](https://github.com/MariaDB/mariadb-connector-nodejs/blob/master/documentation/pipelining.md)に解説されています(英語)。

###### バッチ

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

### テスト環境

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

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

### Node.js Connector のインストール

[MariaDB Connector/Node.js](https://staging-mdb.com/kb/en/library/getting-started-with-the-nodejs-connector/) は 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)のクエリ実行が可能となっております。