MySQL在pooljs中汇集

问题描述 投票:0回答:1

嗨,我刚刚阅读了nodejs的mysql包文档。 Lil有点不确定如何使用池化的最佳实践。

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(....);
});
mysql node.js
1个回答
0
投票

如果您要求建立连接,您基本上会保留该连接一段时间。这有两个重要原因:

  1. 一次只能对一个连接进行一次查询,而不是并行查询。因此,这可以防止两件事使用相同的连接。
  2. 事务是基于连接的,事务中的所有查询都必须在该连接对象上进行。

mysql库无法预测你已经完成了你的事务,这就是你需要发布它的原因。

旁白:您应该考虑查看mysql2以获得更强大的类似库,并使用promises而不是此回调模式。

根据评论更新

当您直接在池中执行query时,池将自动获取连接,运行查询并为您释放它。

如果您只需要执行单个查询而不关心事务,这非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.