Вопрос проверяет понимание управления ресурсами и оптимизации производительности при работе с базами данных в приложениях.
Каждый раз, когда функция открывает новое соединение с базой данных, происходит несколько дорогостоящих операций: установка TCP-соединения, аутентификация пользователя, обмен начальными параметрами. В высоконагруженных приложениях это может занимать от нескольких миллисекунд до секунды, что критично для производительности.
Пул соединений (connection pool) создает заранее заданное количество соединений и переиспользует их. Когда функция запрашивает соединение, она получает его из пула, а после использования возвращает обратно. Это снижает накладные расходы и улучшает масштабируемость.
const { Pool } = require('pg');
const pool = new Pool({ max: 20, idleTimeoutMillis: 30000 });
async function getUser(id) {
const client = await pool.connect();
try {
const result = await client.query('SELECT * FROM users WHERE id = $1', [id]);
return result.rows[0];
} finally {
client.release(); // возвращаем соединение в пул
}
}Использование пула соединений обязательно в production-приложениях, работающих с базами данных. Это повышает производительность, стабильность и позволяет эффективно использовать ресурсы сервера БД.