node.js - Node中如何正确使用MySQL的连接池?
问题描述
在学习NodeJs连接数据库做处理时(用的node-mysql库),书中建议使用连接池的方式管理connection,说是可以降低开销。但是具体如何在生产环境中使用,没有给出更多的说明。所以我产生了如下疑问:我到底该在什么情况下创建一个连接池?
想法1:在web服务器启动之后收到第一个数据库连接请求时,就创建一个连接池,然后它就一直存在,当有需要用到数据库的时候,就从连接池中拿出来使用。直到下一次服务器重启,连接池才会被关闭。
想法2:在处理一个业务请求时时,创建一个连接池,当业务处理完之后就关掉。比如当收到一个用户的请求,我们要连接数据库进行N次查询和N次修改时,建立一个连接池,当这个业务处理完之后,就关闭这个连接池。不过,如果一下子有N个用户发出请求,就需要同时创建多个连接池,总感觉哪里乖乖的。
官方文档也没有写这些东西。请问,具体该怎么办呢?如果有更详细讲解这个话题的文章,多谢分享。谢谢
问题解答
回答1:谢谢邀请。1.之所以用连接池,是因为频繁的建立、关闭连接,会极大的减低系统的性能。2.对于你的想法1,第一个请求过来创建连接池貌似挺好的,但是你的系统在第一次就有多个用户同时请求时,你还来不及创建就要调用,这就出现了问题。所以建议在系统开启的时候就创建。3.想法2,违背了为什么我们使用连接池的目的,频繁的连接,关闭。
回答2:基本是第一种的意思。连接池的目的就是减少数据库连接的创建,所以当然是不关闭的啦。然后称为池是因为它是一种缓冲机制。比如这个池里一开始是空的,来了一个请求,就创建一个连接交出去,用完了就还到这个池里,再来请求的时候,又能借出去了。那这时候如果又来一个请求,之前的连接还没换回来,池是空的,就需要再创建一个连接了,等大家都用完还回来,池里就有两个连接了。总结就是,如果池是空的,那就创建一个新连接借出去,不然就从池里拿一个连接借出去。当然你也可以设置池的连接数上限,或者在连接一段时间都没有被使用的情况下销毁等等。
相关文章:
1. dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下2. 请问怎么改变超链接字体的颜色?3. docker-machine添加一个已有的docker主机问题4. java编程思想第4版中文版的几处谬误?5. java - 做数据库向手机端的推送要系统地学习哪些知识?求大神指点,谢谢!6. Mongodb web连接28017后,提示登录的用户名密码在 db那里预设置7. 为什么我ping不通我的docker容器呢???8. 在add.php中提交数据库已有的姓名,没有提示框9. mysql - 对单表大量数据进行报表汇总有什么高效的方法10. css3 - 大分辨率下,百度、UC、QQ等浏览器 css media queries 的写法
![dockerfile - 我用docker build的时候出现下边问题 麻烦帮我看一下](http://www.haobala.com/attached/image/news/202311/1028095cc6.png)