Модуль 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

Без правильных индексов SELECT на таблице с 1М записей превращается в Seq Scan = тормозит сайт. EXPLAIN ANALYZE — твой друг.

PostgreSQL — твоя главная БД

Открытый, мощный, стандарт для современных приложений.

DevOps-операции

Установка и подключение

sudo apt install postgresql-16
sudo -u postgres psql               # вход как админ
psql -h host -U user -d dbname      # удалённо

Конфиги

Бэкапы — обязанность 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

Репликация

Connection pooling

Postgres плох в большом числе подключений (каждое — fork процесса). Для веб-приложений с 1000+ конкурентных пользователей обязателен PgBouncer.

Мониторинг

Redis — кэш и очереди

In-memory key-value хранилище. Универсальный инструмент.

Применения

Persistence

HA

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, версионироваться, применяться автоматически.

Применение в CI/CD — обычно отдельная стадия перед деплоем приложения.

БД в Kubernetes

Дискуссия «БД в K8s — да или нет?» — закрыта в пользу «да, через operator»:

Managed vs Self-hosted

Managed (RDS, Cloud SQL)Self-hosted (в K8s или VM)
КогдаМаленькая команда, не хочешь админитьКонтроль, мульти-облако, особые требования
Цена+50-100% к VMНиже, но плюс время инженеров
HA, бэкапыИз коробкиТы делаешь сам
РазработкаБыстрееДольше

Совет: до Senior уровня — managed (RDS, Cloud SQL, Aurora). После — учись self-hosted.

Чек-лист

Источники

Foundations пройдены. Время для контейнеров — твоего следующего боевого инструмента.

Модуль 06 → Docker