Vấn đề sử dụng createPool mysql nhiều lần trong nodejs và connectionLimit ok nhất



  • Lúc trước em hay code theo kiểu mỗi model thì lại createPool 1 lần và limit connection là 10. Nhưng sau này thấy nó có vẻ ko tối ưu.
    Nếu viết riêng file connection theo kiểu
    var mysql = require('mysql');

    // Connection width Database
    var pool = mySQL.createPool({
    connectionLimit : 10,
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASS,
    database: process.env.DB,
    });
    var getConnection = function (cb) {
    pool.getConnection(function (err, connection) {
    if(err) {
    return cb(err);
    }
    cb(null, connection);
    });
    };
    module.exports = getConnection;
    rồi mỗi model em require vào và gọi getConnection để xử lý sql liệu nó có createPool nhiều lần như vậy nữa ko?



  • Mình thì viết theo kiểu của các framework khác của PHP, có lẽ tối ưu hơn

    const pg = require('pg');
    const config = {
      user: 'postgres', //env var: PGUSER
      database: 'nodejs', //env var: PGDATABASE
      password: '123456', //env var: PGPASSWORD
      host: 'localhost', // Server hosting the postgres database
      port: 5432, //env var: PGPORT
      max: 10, // max number of clients in the pool
      idleTimeoutMillis: 1000, // how long a client is allowed to remain idle before being closed
    };
    

    Khởi tạo pool

    const pool = new pg.Pool(config);
    function queryDB(sql, cb) {
      pool.connect((err, client, done) => {
          if (err) return cb(`${err}`); // lỗi connect
          client.query(sql, (errQuery, result) => {
              done(err);
              if (err) return cb(`${errQuery}`); // lỗi query
              cb(undefined, result);
          });
      });
    }
    

    các hàm khởi tạo truy xuất database.

    function addNew(tin, cb) {
      const { title, desc, date, image } = tin;
      const sql = `INSERT INTO news(title, "desc", image, date)
      VALUES ('${title}', '${desc}', '${image}', '${date}')`;
      queryDB(sql, cb);
    }
    

    Cuối cùng exports ra

    module.exports = { queryDB, addNew, updateNews, remove, getNewsById };
    

Log in to reply