Пул MySQL в nodejs

0

Привет, я только что прочитал документы пакета mysql для nodejs. Лил немного не знает, как лучше всего работать с пулом.

var mysql = require('mysql');
var pool  = mysql.createPool(...);

pool.getConnection(function(err, connection) {
  // Use the connection
  connection.query('SELECT something FROM sometable', function (error, results, fields) {
    // And done with the connection.
    connection.release();

    // Handle error after the release.
    if (error) throw error;

    // Don't use the connection here, it has been returned to the pool.
  });
});

Нужно ли нам вызывать метод release() каждый раз, когда мы выполняем запрос?

И еще один.

В чем разница между использованием пула напрямую для выполнения запроса и использованием метода getConnection, а затем выполнения запроса? Код с использованием пула:

var pool  = mysql.createPool(...);
pool.query(...)

Используя метод getConnection, выполните запрос:

pool.getConnection(function(err, connection) {
  connection.query(....);
});
Теги:

1 ответ

0

Если вы попросите получить соединение, вы в основном зарезервируете это соединение на некоторое время. Это важно по двум причинам:

  1. Только один запрос может быть выполнен по соединению одновременно, а не параллельно. Таким образом, это предотвращает использование двух вещей одним и тем же соединением.
  2. Транзакции основаны на подключении, и все запросы в транзакции должны выполняться на этом объекте соединения.

В библиотеке mysql не было бы возможности предсказать, что вы "выполнили" свою транзакцию, поэтому вам необходимо ее освободить.

Кроме того: вы должны рассмотреть возможность поиска в mysql2 для подобной библиотеки, которая более мощная, и использовать обещания вместо этого шаблона обратного вызова.

Обновление по комментариям

Когда вы делаете query непосредственно в пуле, пул автоматически получит соединение, запустит запрос и отпустит его для вас.

Это полезно, если вам просто нужно сделать один запрос и не заботиться о транзакциях.

  • 0
    В чем разница между непосредственным использованием пула (var pool = mysql.createPool (...); pool.query (...)) и использованием метода getConnection () для выполнения запроса?
  • 0
    Я обновил свой ответ, чтобы ответить и на этот вопрос.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню