Работал ли ты с Cassandra, MongoDB, Redis, ElasticSearch, ClickHouse
Что проверяют
Это вопрос-инвентарь: интервьюер сверяет ваш опыт со стеком команды и заодно смотрит, честно ли вы отделяете «работал» от «читал». Дальше почти всегда идёт уточнение по одной из баз, поэтому важнее не перечислить все пять, а объяснить, под какую нагрузку каждая сделана.
Как отвечать
Разделите список на три группы: что было в проде, что трогали на своих проектах, про что знаете теорию. Для первой группы называйте драйвер и задачу:
- Cassandra:
gocql, таблица проектируется под конкретный запрос, партиционный ключ определяет распределение, соединений таблиц нет, уровень согласованности выбирается на операцию; - MongoDB: официальный драйвер, документы, индексы, транзакции работают только в реплика-сете;
- Redis:
go-redis, кэш, счётчики, распределённые блокировки, обязательный срок жизни ключа; - Elasticsearch: полнотекстовый поиск и агрегации, индекс обновляется не мгновенно, свежий документ виден после обновления индекса;
- ClickHouse: колоночная аналитика, вставка пачками, точечные изменения строк почти не поддерживаются.
Со стороны Go добавьте то, что спросят следом: context с таймаутом в каждый вызов, один пул на приложение, закрытие курсоров через defer, ретраи с ограничением и бэкофом.
Где спотыкаются
Говорят «работал со всеми», а на уточнении про партиционный ключ Cassandra плывут. Честное «в проде были Redis и ClickHouse, остальное на уровне документации» стоит дороже списка, который разваливается через минуту.
Называют Redis обычной базой и хранят в нём единственную копию данных. Даже с включённой персистентностью часть последних записей теряется при падении процесса, поэтому источником истины он быть не может.
Вставляют в ClickHouse по строке на запрос. Он складывает данные кусками и сливает их фоном, а поток мелких вставок порождает лавину кусков и упирается в ошибку про слишком большое их число. Писать надо пачками или через буферную прослойку.