Как ответить
В коммерческих проектах и во время обучения я в основном работал с PostgreSQL, так как это стандарт для большинства бэкенд-задач. Также есть опыт использования Redis для кеширования и MongoDB в рамках учебного проекта по созданию каталога товаров. Основной упор я делал на понимание того, как данные хранятся физически и как оптимизировать запросы, чтобы база не становилась узким местом приложения.
В PostgreSQL я решал задачи по проектированию схем данных, нормализации до третьей нормальной формы и настройке связей. Например, в последнем проекте я работал с базой заказов, где нужно было эффективно вытягивать историю покупок пользователя. Я использовал индексы (B-tree) для ускорения поиска по внешним ключам и датам. Для сложных выборок писал запросы с использованием JOIN, GROUP BY и агрегатных функций. Чтобы избежать проблемы N+1 на стороне кода, я всегда анализировал, какие данные нужны сразу, и использовал жадную загрузку (Eager Loading).
При работе с SQL я уделяю внимание производительности. Если запрос работает медленно, я использую команду EXPLAIN ANALYZE, чтобы найти причину: например, Sequential Scan там, где должен быть Index Scan. Вот пример простого запроса для получения статистики продаж, который я оптимизировал, добавив составной индекс по полям category_id и created_at:
SELECT category_id, COUNT(*), SUM(price)
FROM orders
WHERE created_at > '2024-01-01'
GROUP BY category_id
HAVING SUM(price) > 10000;Помимо реляционных баз, я использовал Redis как key-value хранилище. В основном это было хранение сессий пользователей и кеширование результатов тяжелых запросов к API. Это позволило снизить нагрузку на основную базу в пиковые часы. В MongoDB я разбирался с принципами Document-oriented подхода, когда структура данных часто меняется или когда вложенные документы удобнее, чем плоские таблицы со связями.
Сейчас я изучаю вопросы транзакций и уровней изоляции (Read Committed, Repeatable Read). Понимаю разницу между ними и знаю, в каких случаях могут возникнуть аномалии вроде «грязного чтения» или «фантомного чтения», и как база данных предотвращает эти ситуации с помощью блокировок или MVCC.