Apache Cassandra · Apache Cassandra 5.0
Сервис избранного хранит копии объявлений в Cassandra, ключ — ad_id. В таблице 90 млн строк на 12 узлах.
Понадобилась витрина «новые объявления в Екатеринбурге за час». Cassandra отказалась выполнять SELECT … WHERE city = 'Екатеринбург', разработчик дописал ALLOW FILTERING, на тестовом стенде с 2 тыс. строк всё летало, в проде запрос стал падать по тайм-ауту.
В работе: Код-ревью запросов к Cassandra: ALLOW FILTERING в продовом коде почти всегда признак не той таблицы.
Как проверяем
Движка Apache Cassandra в браузере пока нет, поэтому здесь не запрос, а выбор решения. Выберите один вариант. После ответа — почему каждый вариант верный или нет. Ответ один на подход: после него показываем разбор.
Источник: на данных классифайда: объявления и города. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Как правильно отдавать новые объявления города?
- Завести отдельную таблицу под запрос: PRIMARY KEY ((city, hour), created_at, ad_id) и писать объявление в обе таблицы
- Оставить ALLOW FILTERING, но добавить LIMIT 100
- Поднять тайм-аут чтения до 60 секунд
- Перенести city в ключ кластеризации: PRIMARY KEY (ad_id, city)