javascript - mysql模块的一些问题,关于连接池的

查看:69
本文介绍了javascript - mysql模块的一些问题,关于连接池的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

关于npm包 mysql官方示例代码的一点疑惑:
首先看第一段代码:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db'
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});

connection.end();
可以看到 查询后,调用connection.end()断开连接;
再看第二段代码:
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. 

});
});

这里面查询完成后调用: connection.release();

问题1 如果这两段代码:
第一段不调用
connection.end();
第二段不调用
connection.release();
会产生什么后果呢?
2、这俩有什么区别呢?
3、这两段代码有什么区别呢,这个连接池该怎么理解呢?
个人理解:连接池可不可以理解为缓存呢,查询了某条数据,第二次查询相同数据直接在缓存里面去取,也就是池子里;

解决方案

1、对数据库的操作一定是同步阻塞的,因为决不允许多个连接同时操作一条记录这种情况的发生,想要操作数据库,必须要先建立连接,而数据库也不允许无限制的建立多个连接,如果某个连接操作完不断开或释放连接,就会影响到后续连接的建立和使用,这对于高并发的情况是需要避免的。
2、connection.end()和 connection.release()的作用都是释放当前连接,但对象不同,前者针对的是普通的连接,而后者针对的连接池。
3、连接池确实有缓存的作用,但是其缓存的不是某条操作取出的具体数据,而是缓存的连接本身,这样当下次操作数据库时就不再需要不停的建立连接和销毁连接了。

这篇关于javascript - mysql模块的一些问题,关于连接池的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆