1. ホーム
  2. mysql

[解決済み] node.js + mysql コネクションプーリング

2023-01-05 20:33:05

質問

MySQL を最も効率的に使用するために、アプリケーションをどのように構成したらよいかを考えています。私はnode-mysqlモジュールを使用しています。ここの他のスレッドは、接続プーリングを使用することを提案したので、私は小さなモジュールmysql.jsをセットアップしました。

var mysql = require('mysql');

var pool  = mysql.createPool({
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    database : 'guess'
});

exports.pool = pool;

これで、mysql に問い合わせたいときはいつでもこのモジュールを要求し、 データベースに問い合わせることができるようになりました。

var mysql = require('../db/mysql').pool;

var test = function(req, res) {
     mysql.getConnection(function(err, conn){
         conn.query("select * from users", function(err, rows) {
              res.json(rows);
         })
     })
}

これは良いアプローチなのでしょうか?私は、すべてがメインの app.js スクリプトで行われる非常に単純な例以外に、mysql 接続を使用する例をあまり見つけることができなかったので、規約/ベストプラクティスが何であるかよくわかりません。

各クエリの後、常に connection.end() を使用すべきですか?どこかでそれを忘れたらどうなりますか?

私のmysqlモジュールのexports部分をどのように書き換えて、接続だけを返すようにすれば、毎回getConnection()を書く必要はないのでしょうか?

どのように解決するのですか?

良い方法だと思います。

接続を取得したいだけなら、プールがあるモジュールに以下のコードを追加してください。

var getConnection = function(callback) {
    pool.getConnection(function(err, connection) {
        callback(err, connection);
    });
};

module.exports = getConnection;

それでも毎回getConnectionを書かなければなりません。しかし、最初に接続を取得したときにモジュールに保存しておくことができます。

使い終わったら、接続を終了させるのを忘れないでください。

connection.release();