Характеристики Postgres

  1. Доступен локально, в облаках (как managed service), в корпорациях (его умеют ставить и обслуживать).
  2. Стабилен, быстр, функционален.
  3. Популярен (документация и люди).
  4. Хорошо масштабируется под большинство задач (большинству приложений и не снятся его ограничения по производительности и размеру).

Вроде бы идеален. Или нет? Давайте посмотрим другие базы на слуху.

Альтернативы

  1. MySQL – GUI утилы лучше, но в остальном по всем характеристикам хуже. Для новых проектов нет смысла.
  2. Oracle/MSSQL – по рекламным заявлениям вроде бы лучше, но на практике особо никому не нужно и бесплатно, а тем более за серьезные деньги. Если нужно, то люди точно знают зачем.
  3. MongoDB – довольно популярная вещь, но нужно быть очень осторожным. Да, изначально кажется удобно: не нужно заводить никаких схем, просто используешь и все. Но проблема как раз в том, что серверная часть должна обеспечивать консистентность данных. Плюс, вдруг возникает понимание, что структуру документооринтированной базы сделать сложнее, т.к. надо заранее продумывать сценарии использования, а в реляционной с этим гораздо проще – обычно достаточно добавить индексы. Другими словами: начинать с Монго легко (но я бы не сказал, что на самом деле легче, чем с традиционными БД), но потом будет все тяжелее и тяжелее. Если не требуется масштабирование планетарного уровня, то лучше с Монго не связываться.
  4. Другие БД – они все нишевые. Если понятно, что есть серьезная причина их использовать, то почему бы и нет, но обычно как дополнительное хранилище, а не основное.

Hibernate aka JPA

Отдельно стоит упомянуть по Hibernate – обычно все ужасы реляционных баз данных в JVM-мире вызваны им.

Почему? Он слишком много обещает и выполнить свои обещания принципиально не может.

Тут опять Spring пытается всех спасти со Spring Data и их репозитариями, но все равно опирается на тот же проблемный базис. Аналогично сделало и в Quarkus – там придумали Panache , но с той же проблемой – уже простое и адекватное API опирается на неадекватного монстра.

Если кто-то на собеседовании попытается задать вопрос о каких-то сложных моментах Hibernate, то ответ простой: в принципе не нужно его использовать.

В одной из следующих заметок разберу альтернативы.

Итог

Сейчас новый проект по умолчанию имеет смысл стартовать на Postgres. При этом ни в каком виде не нужно использовать JPA/Hibernate и связанные с ними технологии.