Базы данных#
PostgreSQL глазами бэкендера: транзакции и уровни изоляции, MVCC, индексы, планы запросов, репликация и шардинг. Плюс обзор Redis и NoSQL.
Оглавление#
Статьи идут в порядке чтения: от базы к деталям. Всего 12 статей.
- Архитектура PostgreSQL — PostgreSQL заводит отдельный процесс операционной системы на каждое подключение.
- Транзакции в PostgreSQL и Go (database/sql, pgx) — Транзакция — группа операций, которая выполняется целиком или не выполняется вовсе.
- Уровни изоляции транзакций в PostgreSQL — Уровень изоляции определяет, насколько сильно параллельные транзакции видят работу друг друга.
- MVCC в PostgreSQL: версии строк, видимость, VACUUM и bloat — MVCC — способ обойтись без блокировок при чтении: каждое изменение строки создаёт её новую версию, а старая продолжает жить, пока её кто-то ещё видит.
- Индексы в PostgreSQL — Индекс — отдельная структура рядом с таблицей, которая позволяет найти нужные строки, не перечитывая её целиком.
- Планирование и оптимизация запросов в PostgreSQL —
EXPLAINпоказывает, как база собирается выполнять запрос. - Взаимоблокировки (Deadlocks) в PostgreSQL — Дедлок — это когда две транзакции держат по ресурсу и ждут ресурс друг друга.
- Пул соединений к PostgreSQL в Go: database/sql, pgx, pgxpool, PgBouncer — Пул соединений с PostgreSQL обязателен, потому что каждое соединение здесь — это отдельный процесс операционной системы, а не лёгкий поток.
- Партиционирование таблиц в PostgreSQL — Партиционирование разрезает одну большую таблицу на несколько физических кусков по значению ключа — например, по месяцам.
- Репликация в PostgreSQL — Репликация — это копия базы, которая повторяет за основной все изменения.
- Шардирование (горизонтальное масштабирование) — Шардирование — разрезание данных по разным серверам, когда одна машина перестала справляться с записью или объёмом.
- Обзор NoSQL и Redis — NoSQL — это не «база без схемы», а семейство хранилищ, каждое из которых заточено под свой способ доступа к данным.