Connection pooling

Тема дорожной карты · Node.js

Пул соединений — это практика поддержания набора заранее установленных многократно используемых соединений с базой данных или сетевым ресурсом в серверном приложении Node.js, устраняющая накладные расходы на создание и разрыв TCP-соединения при каждом запросе. Без пула соединений высоконагруженное приложение Node.js быстро исчерпает лимит соединений на стороне базы данных и будет страдать от высоких задержек из-за повторных TLS-рукопожатий и раундов аутентификации. Популярные библиотеки баз данных Node.js, такие как pg (PostgreSQL), mysql2 и Mongoose для MongoDB, поставляются со встроенной поддержкой пула соединений, настраиваемой через параметры pool.min и pool.max в конструкторе клиента. Для SQL-баз данных конструкторы запросов вроде knex и ORM вроде sequelize работают поверх этих драйверов и наследуют их конфигурацию пула соединений, что упрощает настройку размера пула в продакшн-сервисах Node.js. Мониторинг активных соединений через метрики, экспортируемые в Prometheus, и установка подходящих значений pool.idleTimeoutMillis необходимы для предотвращения утечек соединений в долгоживущих асинхронных серверных приложениях Node.js.

Как это работает

Connection pooling использует driver-библиотеки: pg — для PostgreSQL, mysql2 — для MySQL, better-sqlite3 — для SQLite (sync API, быстрый), mongodb — для MongoDB, redis/ioredis — для Redis. ORM сверху: Prisma (TypeScript-first, schema-based), Drizzle (TS-типизированный SQL DSL), Sequelize (зрелый классический), TypeORM (декораторный). Connection pooling важен в production — никогда не открывайте соединение на запрос без pool.

Когда применять

Prisma или Drizzle — для новых TypeScript-проектов: type-safety + миграции чисто интегрированы. Сырой pg + SQL — когда запросы тонко настроены или ORM мешает. SQLite (better-sqlite3) — для маленьких single-host приложений и embedded; удивительно мощный, проще в эксплуатации. Миграции всегда через тул (Prisma migrate, drizzle-kit, knex); не правьте production-схему руками.

Типичные ошибки

Ловушки Connection pooling: SQL-инъекции из конкатенации строк (параметризованные запросы — есть у каждого драйвера); утечка соединений (важны размер pool + idle timeout); N+1 запросов от наивного ORM (eager-load явно); транзакции, оставленные открытыми из-за early return (async + try/finally); долгие запросы держат row-локи. Slow-query логирование — с самого начала.

Связанные понятия

Полезные ресурсы