在学习NodeJs连接数据库做处理时(用的node-mysql库),书中建议使用连接池的方式管理connection,说是可以降低开销。但是具体如何在生产环境中使用,没有给出更多的说明。所以我产生了如下疑问:我到底该在什么情况下创建一个连接池?
想法1:在web服务器启动之后收到第一个数据库连接请求时,就创建一个连接池,然后它就一直存在,当有需要用到数据库的时候,就从连接池中拿出来使用。直到下一次服务器重启,连接池才会被关闭。但是,貌似还有什么会断掉链接之类的问题,或者说创建了太多了connection。看起来貌似合理,但是感觉有很多问题。
想法2:在处理一个业务请求时时,创建一个连接池,当业务处理完之后就关掉。比如当收到一个用户的请求,我们要连接数据库进行N次查询和N次修改时,建立一个连接池,当这个业务处理完之后,就关闭这个连接池。不过,如果一下子有N个用户发出请求,就需要同时创建多个连接池,总感觉哪里怪怪的。
官方文档也没有写这些东西。 请问,具体该怎么办呢? 如果有更详细讲解这个话题的文章,多谢分享。 谢谢
想法 1 是合理的,并且实际应用中 并没有很多问题呀。连接断开是正常的,一般有自动重连的机制,并且连接数量也是基本可控的 想法 2 单次请求 创建一个连接池 开销多大呀,而且用完就关闭,还不如 每次查询 单独建立一个连接。
@zhangjx 多谢,我多问几句哈。如果是情况1,那是否需要考虑关闭连接池?如果有多台独立的服务器在跑同样的Node App,会链接同一台MySQL数据库,需要什么特殊处理吗?多谢
用pool的最大好处是让APP享受数据库并发,一个连接上的两个语句必须是顺次执行的,但是两个链接就可以同时执行了,如果你用了Pool,不去享受这个,搞毛啊。
The MySQL protocol is sequential, this means that you need multiple connections to execute queries in parallel. You can use a Pool to manage connections, one simple approach is to create one connection per incoming http request.
@flamingtop 打开多个链接是可以并行不假,不过数据库连接池的目的是 复用链接
,每个链接都是socket,如果没有连接池,每次都创建新的链接,最终会Too Many Open Files而挂掉的