С какими базами данных вы работали в реальных проектах?

Ответ

В коммерческой разработке использовал следующие СУБД:

Реляционные (SQL):

  • PostgreSQL — основная СУБД для большинства сервисов. Ценил за строгую поддержку ACID, расширенные типы данных (JSONB, массивы) и мощную систему индексов.
  • MySQL — применял в legacy-проектах и системах, где важна простота и скорость операций чтения.

Нереляционные (NoSQL):

  • MongoDB — использовал для сервисов с высокой нагрузкой на запись и нежесткой схемой данных (например, каталог товаров, логи событий).
  • Redis — применял как кэш-хранилище (session storage, результаты тяжелых запросов) и как брокер сообщений (через Pub/Sub).

Пример работы с JPA (Hibernate) и PostgreSQL:

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String email;

    // Связь One-to-Many. FetchType.LAZY — стандарт для производительности.
    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Order> orders;

    // getters, setters, constructors
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // Spring Data JPA генерирует запрос автоматически
    Optional<User> findByEmail(String email);

    // Можно написать собственный JPQL-запрос
    @Query("SELECT u FROM User u JOIN FETCH u.orders WHERE u.id = :id")
    Optional<User> findByIdWithOrders(@Param("id") Long id);
}

Ответ 18+ 🔞

А, вот это уже интересно, блядь! Наконец-то про что-то путное, а не про этих ваших лебедей-царевен. Слушай сюда, я тебе сейчас про базы данных расскажу, как на самом деле в аду, простите, в продакшене всё устроено.

Ну, реляционные, SQL — это как родная хата, всё по полочкам, по схеме. PostgreSQL — это мой конёк, ёпта. Любил я эту СУБД за её, блядь, принципиальность. ACID? Поддерживает, как олимпийский чемпион. Типы данных? Да там таких навороченных штук — JSONB, массивы — что просто пиздец. Индексы? Мощнее, чем у моего соседа-качка после третьей банки протеина. Для всех серьёзных сервисов — только он.

А MySQL… Ну, это как старый дедовский «Запорожец». Едешь, скрипишь, но едешь. Легаси проекты, где нужно просто и быстро читать, как из помойки, — вот его стезя. Не усложняй, где не надо.

А теперь, блядь, NoSQL — это уже дикий запад, полный пиздец и анархия. MongoDB — это когда тебе похуй на схему, как вчера после корпоратива. Написал документ — и вперёд. Каталог товаров, логи каких-то ебучих событий — самое то. Скорость записи — овердохуища.

Redis — это вообще отдельная песня, ядрёна вошь. Это не база, это шустрая обезьянка-мартышлюшка. Кэш? Сессии? Результаты тяжёлых запросов, чтобы два раза не ебаться? Да легко. А ещё он умеет в Pub/Sub — как почтальон, только быстрее и без пенсии.

Смотри, вот тебе пример, как эта вся магия с JPA и Постгресом выглядит в коде. Только не засыпай, а то хуй с горы прилетит.

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true)
    private String email;

    // Связь One-to-Many. FetchType.LAZY — стандарт для производительности.
    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Order> orders;

    // getters, setters, constructors
}

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // Spring Data JPA генерирует запрос автоматически
    Optional<User> findByEmail(String email);

    // Можно написать собственный JPQL-запрос
    @Query("SELECT u FROM User u JOIN FETCH u.orders WHERE u.id = :id")
    Optional<User> findByIdWithOrders(@Param("id") Long id);
}

Видишь? FetchType.LAZY — это святое, блядь. Чтобы не тащить все заказы пользователя, когда тебе только почта нужна. А то накосячишь — и приложение будет грузиться, как черепаха в сиропе. А вот когда реально надо всё разом — пишешь свой запрос с JOIN FETCH и получаешь данные, не дергая базу сто раз. Красота, ёпта. Вот так и живём, между строгой схемой Постгреса и вольницей Монги. Главное — не перепутать, где что применять, а то будет пиздец, а не архитектура.