Hướng dẫn node js connection pool = mysql - nhóm kết nối nút js = mysql

Node và MySQL là sự kết hợp cho bản dựng nguyên mẫu nhanh và trong các trường hợp khác nhau để xây dựng sản xuất. Trong hướng dẫn này, chúng tôi sẽ tìm hiểu cách kết nối nút với MySQL và cách gộp các kết nối để có hiệu suất và tối ưu hóa tài nguyên tốt hơn.

Bạn cần cài đặt Node và MySQL trong hệ thống của mình trước khi tiến tới hướng dẫn. Để giữ hướng dẫn về điểm, tôi sẽ không cho bạn thấy các bước để cài đặt phần mềm này, một tìm kiếm đơn giản của Google sẽ làm tốt.

Để bắt đầu, hãy tạo một thư mục mới và khởi tạo một dự án nút mới bằng cách sử dụng lệnh được hiển thị bên dưới.

Bây giờ, cài đặt các mô -đun nút cần thiết.

Bây giờ, sao chép và dán mã được hiển thị bên dưới trong một tệp và đặt tên cho nó app.js.app.js.

const mysql = yêu cầu ('mysql'); mysql = require('mysql');

const Connection = mysql.CreateConnection ({& nbsp; host & nbsp; & nbsp;: 'localhost', & nbsp; connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'username',
  password : 'password',
  database : 'databasename'
});

Connection.connect ((err) => {& nbsp; & nbsp; if (err) ném err; & nbsp; & nbsp; console.log ('được kết nối với máy chủ mysql!');});connect((err) => {
    if(err) throw err;
    console.log('Connected to MySQL Server!');
});

Bây giờ, chạy mã và xem đầu ra trên thiết bị đầu cuối.

Bạn sẽ thấy thông điệp sau trong thiết bị đầu cuối.

Đã kết nối với máy chủ MySQL!

Mã của chúng tôi đã tạo thành công kết nối với máy chủ MySQL. Bây giờ chúng tôi có thể thực hiện bất kỳ hoạt động cơ sở dữ liệu nào chúng tôi thích. Mã này là không đủ, chúng tôi cần thực hiện nhóm kết nối để đạt được mục tiêu của chúng tôi.

Kết nối là gì?

Tóm lại, nhóm kết nối tương tự như bộ đệm nơi chúng tôi lưu trữ dữ liệu thường xuyên truy cập. Ở đây dữ liệu là kết nối cơ sở dữ liệu. Mục tiêu là để đạt được khả năng tái sử dụng của các kết nối cơ sở dữ liệu thay vì tạo kết nối mới mỗi khi có nhu cầu về dữ liệu.

Node MySQL Connection Pool ví dụ

Dưới đây là mã với triển khai nhóm kết nối MySQL.

const mysql = yêu cầu ('mysql'); mysql = require('mysql');

const Connection = mysql.CreateConnection ({& nbsp; host & nbsp; & nbsp;: 'localhost', & nbsp; pool = mysql.createPool({
    connectionLimit : 100, //important
    host     : 'localhost',
    user     : 'yourmysqlusername',
    password : 'yourmysqlpasword',
    database : 'yourdbname',
    debug    :  false
});

Connection.connect ((err) => {& nbsp; & nbsp; if (err) ném err; & nbsp; & nbsp; console.log ('được kết nối với máy chủ mysql!');});query("SELECT * FROM TABLE_NAME",(err, data) => {
    if(err) {
        console.error(err);
        return;
    }
    // rows fetch
    console.log(data);
});

Bây giờ, chạy mã và xem đầu ra trên thiết bị đầu cuối.

Bạn sẽ thấy thông điệp sau trong thiết bị đầu cuối.

Đã kết nối với máy chủ MySQL!

Tôi đang cố gắng tìm ra cách cấu trúc ứng dụng của mình để sử dụng MySQL theo cách hiệu quả nhất. Tôi đang sử dụng mô-đun Node-Mysql. Các chủ đề khác ở đây đề xuất sử dụng kết nối gộp, vì vậy tôi đã thiết lập một mô -đun nhỏ mysql.js

var mysql = require('mysql');

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

exports.pool = pool;

Bây giờ bất cứ khi nào tôi muốn truy vấn mysql, tôi yêu cầu mô -đun này và sau đó truy vấn dữ liệu

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);
         })
     })
}

Đây có phải là cách tiếp cận tốt không? Tôi thực sự không thể tìm thấy quá nhiều ví dụ về việc sử dụng các kết nối MySQL bên cạnh một kết nối rất đơn giản trong đó mọi thứ được thực hiện trong tập lệnh Main App.js để tôi không thực sự biết quy ước / thực tiễn tốt nhất là gì.

Tôi có nên luôn sử dụng Connection.end () sau mỗi truy vấn không? Điều gì sẽ xảy ra nếu tôi quên nó ở đâu đó?

Làm thế nào để viết lại phần xuất của mô -đun MySQL của tôi để trả về chỉ một kết nối để tôi không phải viết getConnection () mỗi lần?

Ông Kỹ sư

3,4844 Huy hiệu vàng16 Huy hiệu bạc34 Huy hiệu đồng4 gold badges16 silver badges34 bronze badges

Hỏi ngày 28 tháng 8 năm 2013 lúc 19:23Aug 28, 2013 at 19:23

Hướng dẫn node js connection pool = mysql - nhóm kết nối nút js = mysql

4

Đó là một cách tiếp cận tốt.

Nếu bạn chỉ muốn nhận kết nối, hãy thêm mã sau vào mô -đun của mình, nơi nhóm ở:

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

module.exports = getConnection;

Bạn vẫn phải viết GetConnection mỗi lần. Nhưng bạn có thể lưu kết nối trong mô -đun lần đầu tiên bạn nhận được nó.

Đừng quên kết thúc kết nối khi bạn hoàn thành bằng cách sử dụng nó:

connection.release();

Đã trả lời ngày 28 tháng 8 năm 2013 lúc 19:45Aug 28, 2013 at 19:45

KlaasvaakklaasvaakKlaasvaak

5.54414 Huy hiệu vàng44 Huy hiệu bạc67 Huy hiệu Đồng14 gold badges44 silver badges67 bronze badges

10

Bạn nên tránh sử dụng

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);
         })
     })
}
5 nếu bạn có thể. Nếu bạn gọi
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);
         })
     })
}
5, bạn phải gọi
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);
         })
     })
}
7 khi bạn hoàn thành bằng cách sử dụng kết nối. Nếu không, ứng dụng của bạn sẽ bị kẹt chờ mãi mãi để các kết nối được trả lại cho nhóm sau khi bạn đạt giới hạn kết nối.must call
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);
         })
     })
}
7 when you are done using the connection. Otherwise, your application will get stuck waiting forever for connections to be returned to the pool once you hit the connection limit.

Đối với các truy vấn đơn giản, bạn có thể sử dụng

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);
         })
     })
}
8. Chiếc tốc ký này sẽ tự động gọi
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);
         })
     })
}
7 cho bạn ngay cả trong điều kiện lỗi.

function doSomething(cb) {
  pool.query('SELECT 2*2 "value"', (ex, rows) => {
    if (ex) {
      cb(ex);
    } else {
      cb(null, rows[0].value);
    }
  });
}

Tuy nhiên, trong một số trường hợp, bạn phải sử dụng

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);
         })
     })
}
5. Những trường hợp này bao gồm:

  • Thực hiện nhiều truy vấn trong một giao dịch.
  • Chia sẻ các đối tượng dữ liệu như bảng tạm thời giữa các truy vấn tiếp theo.

Nếu bạn phải sử dụng

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);
         })
     })
}
5, hãy đảm bảo bạn gọi
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);
         })
     })
}
7 bằng cách sử dụng một mẫu tương tự như bên dưới:

function doSomething(cb) {
  pool.getConnection((ex, connection) => {
    if (ex) {
      cb(ex);
    } else {
      // Ensure that any call to cb releases the connection
      // by wrapping it.
      cb = (cb => {
        return function () {
          connection.release();
          cb.apply(this, arguments);
        };
      })(cb);
      connection.beginTransaction(ex => {
        if (ex) {
          cb(ex);
        } else {
          connection.query('INSERT INTO table1 ("value") VALUES (\'my value\');', ex => {
            if (ex) {
              cb(ex);
            } else {
              connection.query('INSERT INTO table2 ("value") VALUES (\'my other value\')', ex => {
                if (ex) {
                  cb(ex);
                } else {
                  connection.commit(ex => {
                    cb(ex);
                  });
                }
              });
            }
          });
        }
      });
    }
  });
}

Cá nhân tôi thích sử dụng

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

module.exports = getConnection;
3S và mẫu
var getConnection = function(callback) {
    pool.getConnection(function(err, connection) {
        callback(err, connection);
    });
};

module.exports = getConnection;
4. Mẫu này kết hợp với ________ 25/________ 26 khiến việc vô tình quên mất kết nối hơn rất nhiều vì nó biến phạm vi từ vựng của bạn thành một cuộc gọi tự động đến
var getConnection = function(callback) {
    pool.getConnection(function(err, connection) {
        callback(err, connection);
    });
};

module.exports = getConnection;
8:

async function usePooledConnectionAsync(actionAsync) {
  const connection = await new Promise((resolve, reject) => {
    pool.getConnection((ex, connection) => {
      if (ex) {
        reject(ex);
      } else {
        resolve(connection);
      }
    });
  });
  try {
    return await actionAsync(connection);
  } finally {
    connection.release();
  }
}

async function doSomethingElse() {
  // Usage example:
  const result = await usePooledConnectionAsync(async connection => {
    const rows = await new Promise((resolve, reject) => {
      connection.query('SELECT 2*4 "value"', (ex, rows) => {
        if (ex) {
          reject(ex);
        } else {
          resolve(rows);
        }
      });
    });
    return rows[0].value;
  });
  console.log(`result=${result}`);
}

Đã trả lời ngày 16 tháng 1 năm 2019 lúc 19:53Jan 16, 2019 at 19:53

Binkibinkibinki

7.1815 Huy hiệu vàng65 Huy hiệu bạc103 Huy hiệu Đồng5 gold badges65 silver badges103 bronze badges

6

Bạn sẽ thấy cái bao bọc này hữu ích :)

var pool = mysql.createPool(config.db);

exports.connection = {
    query: function () {
        var queryArgs = Array.prototype.slice.call(arguments),
            events = [],
            eventNameIndex = {};

        pool.getConnection(function (err, conn) {
            if (err) {
                if (eventNameIndex.error) {
                    eventNameIndex.error();
                }
            }
            if (conn) { 
                var q = conn.query.apply(conn, queryArgs);
                q.on('end', function () {
                    conn.release();
                });

                events.forEach(function (args) {
                    q.on.apply(q, args);
                });
            }
        });

        return {
            on: function (eventName, callback) {
                events.push(Array.prototype.slice.call(arguments));
                eventNameIndex[eventName] = callback;
                return this;
            }
        };
    }
};

Yêu cầu nó, sử dụng nó như thế này:

db.connection.query("SELECT * FROM `table` WHERE `id` = ? ", row_id)
          .on('result', function (row) {
            setData(row);
          })
          .on('error', function (err) {
            callback({error: true, err: err});
          });

Đã trả lời ngày 7 tháng 7 năm 2016 lúc 15:38Jul 7, 2016 at 15:38

Hướng dẫn node js connection pool = mysql - nhóm kết nối nút js = mysql

Tôi đang sử dụng kết nối lớp cơ sở này với MySQL:

"base.js"

var mysql   = require("mysql");

var pool = mysql.createPool({
    connectionLimit : 10,
    host: Config.appSettings().database.host,
    user: Config.appSettings().database.username,
    password: Config.appSettings().database.password,
    database: Config.appSettings().database.database
});


var DB = (function () {

    function _query(query, params, callback) {
        pool.getConnection(function (err, connection) {
            if (err) {
                connection.release();
                callback(null, err);
                throw err;
            }

            connection.query(query, params, function (err, rows) {
                connection.release();
                if (!err) {
                    callback(rows);
                }
                else {
                    callback(null, err);
                }

            });

            connection.on('error', function (err) {
                connection.release();
                callback(null, err);
                throw err;
            });
        });
    };

    return {
        query: _query
    };
})();

module.exports = DB;

Chỉ sử dụng nó như vậy:

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);
         })
     })
}
0

Đã trả lời ngày 4 tháng 1 năm 2017 lúc 21:50Jan 4, 2017 at 21:50

Sagi Tsofansagi TsofanSagi Tsofan

2482 Huy hiệu bạc7 Huy hiệu đồng2 silver badges7 bronze badges

5

Khi bạn hoàn thành kết nối, chỉ cần gọi

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);
         })
     })
}
7 và kết nối sẽ trở lại nhóm, sẵn sàng để được người khác sử dụng lại.

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);
         })
     })
}
1

Nếu bạn muốn đóng kết nối và xóa nó khỏi nhóm, hãy sử dụng

connection.release();
0 thay thế. Nhóm sẽ tạo ra một kết nối mới vào lần tới khi cần thiết.

Nguồn: https://github.com/mysqljs/mysql: https://github.com/mysqljs/mysql

Đã trả lời ngày 23 tháng 2 năm 2018 lúc 12:13Feb 23, 2018 at 12:13

Mukesh Chapagainmukesh ChapagainMukesh Chapagain

24.4K15 Huy hiệu vàng114 Huy hiệu bạc118 Huy hiệu đồng15 gold badges114 silver badges118 bronze badges

Bạn có thể sử dụng định dạng này khi tôi đã sử dụng

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);
         })
     })
}
2

Đã trả lời ngày 12 tháng 7 năm 2021 lúc 22:56Jul 12, 2021 at 22:56

Hướng dẫn node js connection pool = mysql - nhóm kết nối nút js = mysql

Sử dụng tiêu chuẩn mysql.createpool (), các kết nối được tạo ra một cách uể oải bởi nhóm. Nếu bạn định cấu hình nhóm để cho phép tối đa 100 kết nối, nhưng chỉ sử dụng 5 lần đồng thời, chỉ có 5 kết nối được thực hiện. Tuy nhiên, nếu bạn định cấu hình nó cho 500 kết nối và sử dụng tất cả 500, chúng sẽ vẫn mở cho thời lượng của quy trình, ngay cả khi chúng không hoạt động!

Điều này có nghĩa là nếu máy chủ MySQL của bạn Max_Connections của bạn là 510 Hệ thống của bạn sẽ chỉ có 10 kết nối MySQL cho đến khi máy chủ MySQL của bạn đóng chúng lại (phụ thuộc vào những gì bạn đã đặt Wait_Timeout của bạn thành) hoặc ứng dụng của bạn đóng! Cách duy nhất để giải phóng chúng là đóng các kết nối thủ công thông qua thể hiện nhóm hoặc đóng nhóm.

Mô-đun MYSQL-Connection-Pool-Manager đã được tạo để khắc phục sự cố này và tự động mở rộng số lượng kết nối phụ thuộc vào tải. Các kết nối không hoạt động được đóng và các nhóm kết nối nhàn rỗi cuối cùng được đóng nếu không có bất kỳ hoạt động nào.

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);
         })
     })
}
3

Tham khảo: https://www.npmjs.com/package/mysql-connection-pool-manager

Đã trả lời ngày 6 tháng 2 năm 2019 lúc 9:23Feb 6, 2019 at 9:23

Tôi luôn sử dụng Connection.Relase (); sau khi pool.getConnection như

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);
         })
     })
}
4

Đã trả lời ngày 29 tháng 8 năm 2016 lúc 9:32Aug 29, 2016 at 9:32

Hướng dẫn node js connection pool = mysql - nhóm kết nối nút js = mysql

AlexalexAlex

7881 Huy hiệu vàng7 Huy hiệu bạc17 Huy hiệu đồng1 gold badge7 silver badges17 bronze badges

2

Làm cách nào để tạo nhóm kết nối MySQL trong Node JS?

NodeJS Tích hợp MySQL: Kết nối nhóm var pool = mysql. createdPool ({ConnectionLimit: 7, host: 'localhost', người dùng: 'root', mật khẩu: '', cơ sở dữ liệu: 'todoApp'});var pool = mysql. createPool({ connectionLimit: 7, host: 'localhost', user: 'root', password: '', database: 'todoapp' });

Node JS có thể kết nối với MySQL không?

Khi bạn đã chạy và chạy trên máy tính của mình, bạn có thể truy cập nó bằng cách sử dụng Node.js.Để truy cập cơ sở dữ liệu MySQL với Node.js, bạn cần trình điều khiển MySQL.. To access a MySQL database with Node.js, you need a MySQL driver.

Làm cách nào để tạo một nhóm kết nối trong Node JS?

Mục lục..
Định cấu hình trình điều khiển Node.js (Cài đặt máy khách).
Định cấu hình trình điều khiển Node.js (Trình quản lý gói nút).
Chạy các ví dụ Node.js ..
Node.js Thuộc tính kết nối ..
Node.js kết nối gộp.Cải thiện hiệu suất của Node.js với kết nối gộp ..
Lớp kết nối ..
Lớp kết quả ..
Lớp tuyên bố ..

Nhóm kết nối trong MySQL là gì?

Nhóm kết nối MySQL hoạt động ở phía máy khách để đảm bảo rằng máy khách MySQL không liên tục kết nối và ngắt kết nối với máy chủ MySQL.Nó được thiết kế để lưu trữ các kết nối nhàn rỗi trong máy khách MySQL để sử dụng bởi những người dùng khác khi cần thiết.operates on the client side to ensure that a MySQL client does not constantly connect to and disconnect from the MySQL server. It is designed to cache idle connections in the MySQL client for use by other users as they are needed.