Ответ
В коммерческой разработке использовал следующие СУБД:
Реляционные (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);
}