单数据库连接vs连接池:多线程及Node.js场景技术问询
对数据库连接池的理解
维持多个数据库连接,客户端应用可直接使用这些连接发送查询,无需承担建立新TCP连接(如握手)的开销。
待深入的问题
1. 多线程应用中使用单连接的局限
- 多线程能否共享单连接发送接收数据?此时查询是否按顺序执行?
- 是否可在收到首个查询响应前发送多个查询?还是socket会阻塞至收到首个响应?若为后者,是否存在误读其他查询返回数据的风险?
- 通常数据库是按查询还是按连接创建线程?
2. Node.js这类单线程应用中,为何需要连接池?
以下为示例代码:
let connection = msql.Connection() const getPerson = async () => { connection.Query('SELECT * from People where name = "test"') } let arr = Array.from(Array(1_000_000).keys()) await Promise.all(arr.map(x => { getPerson() }))
(注:修正了原代码中的语法错误,包括字符串引号冲突、Array.from参数括号问题及Promise大小写)
对应的疑问:
- 是否每次调用
getPerson()都会同步执行connection.Query(),由C++ API发送请求后事件循环继续,可再次调用发送新查询?是否存在我未注意到的限制?
核心疑问
为何在上述场景中使用单连接处理多查询不可行?
内容的提问来源于stack exchange,提问作者JackG
相关产品推荐
相关产品推荐

