请问这样的业务需求下,需要使用mysql的连接池不?
发布于 9个月前 作者 luoliangle 436 次浏览

在写一个服务器端的程序,功能是客户端post一个JSON表,服务器根据JSON表内容,查询mysql数据库后返回一个JSON表。服务器需要支持高并发。

我有2个疑问 1 createPool 中的属性有个connectionLimit ,这个值要怎么设置?是根据服务器的性能吗? 2 connectionLimit 默认是十,我一个客户端连接使用一个mysql连接,那么如果有十个以上客户端并发,连接池的waitForConnections为true,queueLimit为0,那么第十一个客户端就开始就在排队了,那为什么还要用连接池?不使用连接池直接每次mysql.createConnection不是能支持更多的并发吗?

8 回复

连接池只是把tcp的一些握手,标记确认省去,一直保持在双方通信状态, 跟排不排队没关系。

谢谢!两篇文章我都看了,有收获。但是并没有解决我的两个疑问

@tulayang “ 连接池只是把tcp的一些握手,标记确认省去,一直保持在双方通信状态”,那等于连接池是针对一个TCP连接中建立多个数据库连接的优化,如果一个TCP连接就使用一个数据库连接,那连接池的意义就不大,我可以这样理解不?

@luoliangle 假入这个数据库对象是con, con.open(), con.read() 打开连接,读取等,完了之后,你con.close()关闭了连接。 然后你又想操作数据库,就不得不con.open()重来一次打开初始化(一大堆底层操作,需要时间)。 如果不close,把con缓存, 再使用就不需要重新open。 一个连接用池也是有好处的。 你自己不显式close数据库, 也相当于自己做个池.

@tulayang 我现在的业务中,基本一个tcp连接只会open和close一次。多个并发共享一个连接池时,超过池中最大连接数时,按照node-mysql的解释新的连接就会被挂起。相当于TCP连接客户端也在等待,那是这样客户端等待久,还是每个连接都open(),close()数据库,客户端等待久?还有我第一个问题,您能给点建议不?谢谢

@luoliangle 客户端总是需要等待的. 如果你只有10个连接,同时来11个,第11个必须等前10个连接完毕才能开始. 这是没有办法的。 每个连接需要消耗内存, 如果要硬性提高连接数上限就是在提高内存、cpu。 比如说,一个连接要消耗2M内存,那么100个连接就要消耗至少200M内存,1000个连接就是至少2000M内存。排队总是会存在的。 不过大流量同时访问是相对要少的。连接池是很有好处的。

@tulayang 哦,有点明白了,谢谢!

回到顶部