Предсказание, с которым никто не согласен
Моё утверждение: выбирать базу данных под задачу — контрпродуктивно. Большинство разработчиков тратит недели на сравнение PostgreSQL vs MongoDB vs Redis, а потом тащит эту базу через весь проект, пока она не становится узким местом.
Вся эта возня с выбором «правильной» базы — это в 90% случаев преждевременная оптимизация. Потому что через полгода требования изменятся, и выбранная вами «идеальная» база данных окажется не той.
Анти-гайд: чего НЕ надо делать
1. Не выбирайте базу данных на старте проекта
Я видела, как команды месяцами выбирали между PostgreSQL и MySQL. Месяцы! На пустом проекте без единого реального запроса. Это аналогично тому, как если бы вы выбирали марку грузовика для перевозки одного чемодана.
Что происходит на практике: стартап выбирает MongoDB, потому что «гибкость схемы». Через год у них 50 миллионов документов, и они пишут пайплайны агрегации, которые работают по 30 секунд. А PostgreSQL с JSONB сделал бы то же самое быстрее.
Почему это не работает: вы не знаете своих будущих запросов. Вы знаете только самые первые. Первый год — это всегда «мне нужно быстро запуститься». Выбирайте инструмент, который позволяет итерироваться, а не оптимизировать.
2. Не стройте архитектуру вокруг одной базы данных
Классическая ошибка: «У нас Postgres, значит всё — пользователи, заказы, аналитика — в Postgres». Это как пытаться забить все гвозди одним молотком, включая винты.
Реляционные базы отлично работают для транзакционных данных. Для кэширования — нужен Redis. Для полнотекстового поиска — специализированный движок. Для аналитики с тысячами запросов в минуту — колоночная база данных.
Реальный пример: один мой знакомый разработчик хранил сессии пользователей в той же PostgreSQL, что и основные данные. Когда сессий стало 10 миллионов, каждый запрос на авторизацию начал конкурировать за ресурсы с аналитическими запросами. Перенос сессий в Redis решил проблему за день.
3. Не игнорируйте денормализацию
Нас всех учили: нормализуй данные, избегай дублирования. Это правило работает в вакууме, но в реальных системах денормализация — это осознанный компромисс ради производительности.
Представьте: у вас интернет-магазин. Запрос «показать заказ со всеми товарами, их ценами и статусами» в нормализованной схеме требует четырёх JOINов. В денормализованной — одного SELECT. На 1000 запросов в секунду разница колоссальная.
Когда денормализация оправдана:
- Данные читаются в 10 раз чаще, чем пишутся
- Вам нужна консистентность только «достаточно свежая», а не строгая
- Вы готовы обновлять дубликаты при изменении основной записи
4. Не доверяйте «вечному» хранению
Самая опасная иллюзия: «мы однажды загрузим данные, и они будут храниться вечно». В реальности данные устаревают, бизнес-требования меняются, а юридические требования требуют удаления.
Проектируйте схему так, чтобы у данных был TTL (time to live). Время жизни записи в кэше, время хранения сессии, срок актуальности статистики. Это не «удаление данных» — это управление жизненным циклом.
Что делать вместо этого
Принцип простой: начните с самого простого решения, которое работает. Если данных немного и запросов мало — одна база, простая схема. По мере роста добавляйте специализированные хранилища.
Это не значит, что архитектура не важна. Важна. Но тратить месяцы на «идеальную» архитектуру, которая устареет через полгода — это не архитектура, это прокрастинация.
Лучший архитектор — не тот, кто предвидит все будущие требования, а тот, кто умеет быстро адаптироваться, когда требования меняются. А для адаптации нужна гибкость, а не идеальное решение на все случаи жизни.
Вот моё предсказание: через два года большинство «экспертов» согласятся, что выбор базы данных на старте — это меньшая из проблем. Но пока они спорят о PostgreSQL vs MongoDB, кто-то уже запустился и собрал первых клиентов.
Комментарии
Пока нет комментариев. Стань первым!