Модуль 05 — Базы данных (минимум для DevOps)
Ты не DBA. Но ты разворачиваешь БД, бекапишь, мониторишь, восстанавливаешь после сбоя. Этот минимум обязателен.
SQL — обязательно
Без SQL невозможно дебажить продакшен и понимать что происходит в БД.
# Базовые конструкции
SELECT id, email, created_at FROM users WHERE active = true ORDER BY created_at DESC LIMIT 10;
# JOIN
SELECT u.email, COUNT(o.id) as orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email
HAVING COUNT(o.id) > 5;
# CTE (читаемее, чем подзапросы)
WITH active_users AS (
SELECT id FROM users WHERE last_login > NOW() - INTERVAL '7 days'
)
SELECT * FROM orders WHERE user_id IN (SELECT id FROM active_users);
# Транзакции
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; # или ROLLBACK
# EXPLAIN — показать план запроса
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'a@b.com';
Индексы — must understand
- B-tree — по умолчанию. Для равенства, диапазонов, ORDER BY.
- Hash — только для равенства, очень быстрый.
- GIN, GiST — для PostgreSQL: full-text, JSON, geo.
- Partial — индекс с условием:
CREATE INDEX ... WHERE active = true. - Composite — на несколько колонок, порядок имеет значение.
Без правильных индексов SELECT на таблице с 1М записей превращается в Seq Scan = тормозит сайт. EXPLAIN ANALYZE — твой друг.
PostgreSQL — твоя главная БД
Открытый, мощный, стандарт для современных приложений.
DevOps-операции
Установка и подключение
sudo apt install postgresql-16
sudo -u postgres psql # вход как админ
psql -h host -U user -d dbname # удалённо
Конфиги
- postgresql.conf — параметры (память, autovacuum, WAL)
- pg_hba.conf — кто откуда подключается + метод аутентификации
- recovery.conf /
postgresql.auto.conf— для standby
Бэкапы — обязанность DevOps
# Логический бекап
pg_dump -h host -U user -Fc dbname > backup.dump
# Восстановление
pg_restore -h host -U user -d newdb backup.dump
# Физический + WAL archiving для PITR (Point-in-Time Recovery)
pg_basebackup -h host -D /backup -Ft -z -P
Репликация
- Streaming replication — physical, master-replica. Standard для HA.
- Logical replication — на уровне строк, можно частично, разные версии.
- Synchronous vs async — trade-off latency vs data loss.
Connection pooling
Postgres плох в большом числе подключений (каждое — fork процесса). Для веб-приложений с 1000+ конкурентных пользователей обязателен PgBouncer.
Мониторинг
pg_stat_activity— активные запросыpg_stat_replication— статус реплик, lagpg_stat_statements— топ медленных запросов (extension)- postgres_exporter для Prometheus → Grafana дашборд
Redis — кэш и очереди
In-memory key-value хранилище. Универсальный инструмент.
Применения
- Cache — снять нагрузку с БД (read-through, cache-aside patterns)
- Sessions — пользовательские сессии
- Rate limiting — INCR + EXPIRE
- Queues — Lists или Streams (но для серьёзных очередей лучше RabbitMQ/Kafka)
- Pub/Sub — простой messaging
- Distributed locks — Redlock алгоритм
Persistence
- RDB — snapshots (быстрое восстановление, но между snapshot теряются данные)
- AOF (Append-Only File) — лог операций, надёжнее, медленнее
- Часто комбинация: AOF + RDB
HA
- Sentinel — для failover в master-replica
- Cluster — горизонтальное шардирование
- AWS ElastiCache — managed
NoSQL — обзорно
MongoDB
Document store. JSON-подобные документы (BSON). Replica sets, sharding. Хороший fit для гибких схем (CMS, каталоги).
DynamoDB (AWS)
Managed KV/document. Бесконечно масштабируемый. Главное — правильно выбрать partition key. Стоит дёшево при правильном использовании, дорого при неправильном.
Cassandra
Wide-column. Для очень больших объёмов и высокой доступности (write-optimized). Сложный в эксплуатации. Используется в Netflix, Apple.
Elasticsearch / OpenSearch
Поисковая система + хранилище логов. Подробнее в модуле Observability.
Миграции схем — Schema as Code
Изменения схемы БД должны быть в Git, версионироваться, применяться автоматически.
- Flyway — Java-based, простые SQL миграции, стандарт
- Liquibase — XML/YAML/SQL, мощнее, сложнее
- Alembic — Python (со SQLAlchemy)
- golang-migrate — для Go-приложений
- Atlas — современный, declarative подход
Применение в CI/CD — обычно отдельная стадия перед деплоем приложения.
БД в Kubernetes
Дискуссия «БД в K8s — да или нет?» — закрыта в пользу «да, через operator»:
- CloudNativePG — современный operator для PostgreSQL ⭐
- Zalando Postgres Operator — проверенный временем
- Percona Operators — для MySQL, MongoDB
- Strimzi — Kafka в K8s
Managed vs Self-hosted
| Managed (RDS, Cloud SQL) | Self-hosted (в K8s или VM) | |
|---|---|---|
| Когда | Маленькая команда, не хочешь админить | Контроль, мульти-облако, особые требования |
| Цена | +50-100% к VM | Ниже, но плюс время инженеров |
| HA, бэкапы | Из коробки | Ты делаешь сам |
| Разработка | Быстрее | Дольше |
Совет: до Senior уровня — managed (RDS, Cloud SQL, Aurora). После — учись self-hosted.
Чек-лист
- ☐ Пишу SELECT с JOIN на 3+ таблицы
- ☐ Понимаю INNER vs LEFT JOIN
- ☐ Делаю pg_dump и восстанавливаю
- ☐ Знаю что такое connection pooler
- ☐ Могу настроить PostgreSQL replica
- ☐ Использую EXPLAIN ANALYZE для медленных запросов
- ☐ Понимаю когда Redis, когда PG
- ☐ Знаю про CloudNativePG
Источники
- Книга: «PostgreSQL Up and Running» — Regina Obe
- Туториал: postgresqltutorial.com
- Индексы: use-the-index-luke.com
- YouTube: Hussein Nasser — отличный канал по БД и backend
Foundations пройдены. Время для контейнеров — твоего следующего боевого инструмента.