В чем преимущество использования базы данных для хранения данных
Что проверяют
Понимаете ли вы, какие задачи база решает за вас по сравнению с файлами или коллекцией в памяти, и знаете ли её цену. Следом обычно спрашивают про транзакции и уровни изоляции или про случаи, когда база не нужна.
Как отвечать
Сравнивайте с альтернативой, так ответ получается предметным. Представьте, что заказы лежат в JSON-файле или в HashMap внутри сервиса, и перечислите, что тогда придётся писать самому:
- транзакции и ACID: списать деньги и создать заказ либо вместе, либо никак. В Spring это
@Transactionalповерх транзакций базы; - конкурентный доступ: сотни запросов одновременно читают и пишут, а база разводит их блокировками, MVCC и уровнями изоляции. С файлом вы получите потерянные записи;
- целостность:
PRIMARY KEY,UNIQUE,FOREIGN KEY,CHECKработают, даже когда в коде баг или данные пишет другой сервис; - запросы: SQL с
JOIN, агрегатами и индексами. Найти заказы клиента за месяц это один запрос, а не проход по всему файлу; - надёжность: журнал упреждающей записи (WAL в PostgreSQL) переживает падение процесса и сервера, а бэкапы с восстановлением на момент времени спасают от случайного удаления;
- доступ и масштаб: роли и права, реплики для чтения.
Со стороны Java назовите стек: JDBC, пул соединений (HikariCP по умолчанию в Spring Boot), JPA/Hibernate или Spring Data, миграции через Flyway или Liquibase.
Закончите ценой: сетевой вызов на каждый запрос, эксплуатация, миграции схемы, проблема N+1 при неосторожной работе с ORM. Для кэша, логов и файлов база не лучший выбор, там уместнее Redis, файловое или объектное хранилище.
Где спотыкаются
Говорят, что PostgreSQL сам делает резервные копии. Он даёт инструменты (pg_dump, pg_basebackup, архивирование WAL), а расписание, хранение и проверку восстановления настраиваете вы или облачный сервис.
Приписывают базе кэш результатов запросов. В PostgreSQL его нет, в MySQL его убрали в версии 8.0. В памяти кэшируются страницы данных, а не готовые ответы.
Перечисляют преимущества списком без примеров. Интервьюер ждёт связки «свойство базы → какую проблему приложения оно закрывает», иначе ответ звучит как пересказ учебника.