面试题答案
一键面试1. 配置和使用MySQL连接池
在Node.js中,可以使用mysql
或mysql2
模块来配置和使用MySQL连接池。以mysql2
为例:
- 安装模块:
npm install mysql2
- 配置连接池:
const mysql = require('mysql2'); const pool = mysql.createPool({ host: 'localhost', user: 'your_username', password: 'your_password', database: 'your_database', connectionLimit: 10, // 连接池中的最大连接数 queueLimit: 0 // 连接池中等待获取连接的最大请求数,0表示不限制 }); const promisePool = pool.promise();
- 使用连接池执行SQL查询:
async function queryData() { try { const [rows] = await promisePool.query('SELECT * FROM your_table'); console.log(rows); } catch (error) { console.error('Error querying database:', error); } } queryData();
2. 高并发场景下需重点关注并优化的参数
connectionLimit
:- 优化原理:该参数设置连接池中的最大连接数。如果设置过小,在高并发时可能会导致请求因无法获取连接而等待,降低系统响应速度;设置过大,则可能会耗尽数据库资源,因为数据库能同时处理的连接数是有限的。需要根据数据库服务器的硬件资源(如CPU、内存、网络带宽等)以及预估的并发请求数来合理设置该值。例如,通过性能测试,逐步调整该参数,观察系统的响应时间和数据库资源使用率,找到一个平衡点。
queueLimit
:- 优化原理:它表示连接池中等待获取连接的最大请求数。当连接池中的所有连接都被占用时,新的请求会进入等待队列。如果设置为0,表示不限制等待队列的长度,可能会导致大量请求堆积,占用过多内存;设置过小,可能会使部分请求直接报错,提示无法获取连接。合理设置该值可以避免系统因请求堆积而导致内存溢出,同时确保有足够的请求能够得到处理。可以根据系统的负载能力和业务需求来调整该值,比如对于一些对响应时间要求极高的业务,可以适当降低该值,快速返回错误,而对于一些允许一定等待时间的业务,可以适当提高该值。
acquireTimeout
:- 优化原理:此参数指定从连接池获取连接的超时时间(单位为毫秒)。如果在这个时间内无法获取到连接,将会抛出错误。在高并发场景下,如果设置过短,可能会导致大量请求因获取连接超时失败;设置过长,可能会使请求长时间等待,降低系统的响应速度。应根据业务场景和预估的最大等待时间来设置该值,例如,对于实时性要求高的业务,设置相对较短的超时时间,对于一些后台批量处理任务,可以适当延长超时时间。