Выбор базы данных — одно из первых решений в новом проекте. Разбираем самые популярные варианты.
Быстрый выбор
| Задача | Выбор |
|---|---|
| Веб-приложение, стартап | PostgreSQL |
| Учёба, прототип | SQLite |
| Мобильное приложение | SQLite |
| Гибкая схема, документы | MongoDB |
| Высокая нагрузка на запись | Cassandra / ClickHouse |
| Аналитика, OLAP | ClickHouse / BigQuery |
PostgreSQL
Лучший выбор для большинства задач.
Сильные стороны:
- Полная поддержка SQL-стандарта
- Мощные функции: оконные функции, CTE, JSONB, полнотекстовый поиск, геоданные (PostGIS)
- Строгий — не позволяет хранить некорректные данные
- Расширяемый — тысячи расширений
- Бесплатный и открытый
Минусы:
- Требует настройки для высокой производительности
- Немного сложнее в администрировании чем MySQL
Когда использовать: веб-приложения, аналитика, стартапы, продакшн-системы.
-- PostgreSQL умеет то, что MySQL не умеет
SELECT name,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) as rank
FROM employees;
MySQL / MariaDB
Популярен в веб-разработке, особенно со старыми проектами.
Сильные стороны:
- Простота настройки
- Широкая поддержка хостингов
- WordPress, Drupal, многие CMS работают на MySQL
- InnoDB — надёжный движок с транзакциями
Минусы:
- Слабее PostgreSQL в аналитических функциях
- Исторически более «мягкий» — мог принимать некорректные данные
- Oracle владеет проектом (спорный момент для open-source)
Когда использовать: legacy-проекты, WordPress-сайты, если уже используется.
SQLite
Файловая база — вся БД в одном файле.
Сильные стороны:
- Не нужен сервер
- Один файл — легко копировать и переносить
- Встроен в Python, Go, браузеры, мобильные ОС
- Быстрый для чтения
Минусы:
- Нет параллельной записи
- Не подходит для высоконагруженных приложений
- Меньше функций
Когда использовать: мобильные приложения (iOS/Android), десктопные приложения, учёба, прототипы, тесты.
# SQLite встроен в Python
import sqlite3
conn = sqlite3.connect('mydb.db')
MongoDB
Документоориентированная NoSQL база.
Сильные стороны:
- Гибкая схема — каждый документ может иметь разную структуру
- JSON-подобный формат (BSON)
- Горизонтальное масштабирование
Минусы:
- Нет JOIN (нужно делать в приложении или через $lookup)
- Нет транзакций на несколько коллекций (в старых версиях)
- Не SQL — отдельный синтаксис запросов
- Исторически были проблемы с целостностью данных
Когда использовать: каталоги с нефиксированной структурой, CMS, когда схема меняется часто.
ClickHouse
Колоночная БД для аналитики.
-- ClickHouse считает миллиарды строк за секунды
SELECT toStartOfMonth(created_at), sum(amount)
FROM orders
GROUP BY 1
-- На 10 млрд строк: <1 секунды
Когда использовать: аналитика больших данных, логи, метрики. Не подходит для OLTP (много мелких INSERT/UPDATE).
Redis
In-memory хранилище ключ-значение.
Не реляционная БД — хранит данные в памяти. Используется как:
- Кэш (сессии, результаты запросов)
- Очередь задач (Celery + Redis)
- Pub/Sub
Когда использовать: кэширование, сессии, очереди. Не для основного хранения данных.
Итог
Для большинства новых проектов — PostgreSQL. Мощный, бесплатный, универсальный. Вы не ошибётесь с этим выбором.
SQLite — для учёбы и мобильных приложений. MongoDB — если у вас действительно документы с нефиксированной схемой. ClickHouse — когда PostgreSQL перестаёт справляться с аналитическими запросами.