меняются новые объекты (до 100 000 в сек) для разных пользователей, объект может быть в 3 состояниях - Started -> InProgress -> Completed (иногда Started->Completed), нужно считать количество объектов в каждом состоянии по каждому пользователю и выдавать их список за какой-то диапазон времени. Изменение состояния большинства объектов происходит в течние минуты. Финальное состояние хотелось бы видеть сразу в SELECT, а не после непредсказуемого merge. Первое, что приходит в голову, - вставлять запись о каждом состоянии в MergeTree (но непонятно, как выбирать только последний стейт каждого объекта) или ReplacingMT и делать SELECT FINAL (но, по тому, что я читал, скорость выборки падает в разы), а так же делать AggregatedMT MV для каждого состояния, чтоб считать объекты в каждом состоянии.
Есть какие-то best practice для подобной задачи в КХ?
Если это игра и результаты запроса нужны не для анализа постфактум, а для хода игры, то не полетит, кх eventual consistent и время выполнения запросов непредсказуемо и слишком медленно для маленьких выборок.
Обсуждают сегодня