Connection pooling на собеседовании Data Engineer
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем разбирать на собесе
Connection management — частая боль. На собесе DE: «зачем pgbouncer», «transaction pooling».
Зачем pooling
Postgres connection — heavy:
- Process-per-connection (Postgres < 17).
- 5-10 MB memory each.
- Backend startup ~50-100ms.
100 микросервисов × 20 connections each = 2000 connections → 10-20 GB RAM на DB.
Pooling. Reuse connections.
App ─→ Pool (20 connections) ─→ DBApp opens / closes pool connection (cheap), физическая connection переиспользуется.
pgbouncer
Lightweight Postgres pooler.
[App 1] ─┐
[App 2] ─┼─→ pgbouncer (1000 incoming) ─→ DB (50 backend)
[App 3] ─┘PG limit — 50 backend connections, app думает о 1000.
Modes:
- Session pooling. Connection assigned to session for life. Like direct connect.
- Transaction pooling. Connection per transaction. Аpp гораздо более эффективно.
- Statement pooling. Connection per statement. Самый strict, не для все workloads.
Transaction vs session pooling
Session. Stateful — temporary tables, prepared statements, advisory locks работают. Less efficient.
Transaction. Stateless after each transaction. Гораздо больше throughput.
Каveats transaction pooling:
- Prepared statements не persistent — нужно
PREPAREв каждой transaction (или disable). - Session-level settings (
SET) — теряются. - Advisory locks — careful.
- LISTEN/NOTIFY — disabled.
Для большинства apps transaction pooling OK. Issues — review code.
Application-level pools
JVM apps использовать HikariCP (Java) — best-in-class.
Python — psycopg2.pool, sqlalchemy.pool.
Layered.
App pool (e.g., 10 conn) ─→ pgbouncer ─→ DBЛокальный pool minimizes round-trip к pooler. Pooler shares physical connections multiple apps.
Связанные темы
- Транзакции и MVCC для DE
- Spark RDD vs DataFrame для DE
- WAL и репликация для DE
- Подготовка к собесу Data Engineer
FAQ
Это официальная информация?
Нет. Статья основана на документации pgbouncer / HikariCP / Postgres.
Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.