Использовал ли ты NoSQL решения?
Что проверяют
Не список технологий в резюме, а умеете ли вы объяснить, зачем проекту понадобилось хранилище помимо реляционной базы и какую цену за это заплатили. Следом спрашивают, почему не хватило PostgreSQL и что было самым неприятным в эксплуатации.
Как отвечать
Отвечайте на своём опыте по схеме «задача, выбор, реализация, проблемы, результат»:
- задача: кэш горячих данных, сессии, счётчики и rate limiting, хранилище событий, документы с изменчивой структурой;
- почему это хранилище: Redis за скорость и готовые структуры (TTL, сортированные множества,
INCR), MongoDB за документную модель, Cassandra или ScyllaDB за запись больших потоков с масштабированием по узлам; - как подключали из Go:
github.com/redis/go-redis/v9,go.mongodb.org/mongo-driver,github.com/gocql/gocql. Один клиент на приложение с пулом соединений, таймауты черезcontext.Context, метрики и трейсинг на обёртке; - проблемы: инвалидация кэша, лавина запросов к базе при протухании популярного ключа (её гасят через
golang.org/x/sync/singleflightили разброс TTL), горячие ключи, моделирование таблиц под запросы в Cassandra, выбор политики вытеснения в Redis; - результат: что изменилось в цифрах. Цифры приводите свои: задержка, нагрузка на основную базу, объём данных.
Если с NoSQL в продакшене вы не работали, скажите прямо и покажите, что понимаете выбор. Например: работали с PostgreSQL, гибкие атрибуты хранили в jsonb, Redis поднимали в пет-проекте и знаете, где он пригодился бы в прошлой команде. Это честнее и убедительнее выдуманного кейса, который развалится на втором уточнении.
Где спотыкаются
Перечисляют названия без контекста: «работал с Mongo, Redis и Cassandra». Интервьюер уточнит, какой был shard key или политика вытеснения, и ответ закончится.
Повторяют мифы: «NoSQL быстрее и масштабируется, а SQL нет», «в NoSQL нет транзакций». В MongoDB транзакции есть давно, а PostgreSQL хорошо масштабируется на чтение репликами.
Держат Redis основным хранилищем и не знают, как он сохраняет данные на диск (RDB, AOF) и что произойдёт при заполнении памяти. Этот вопрос почти всегда звучит сразу после слова «Redis».