Архитектура статистики с группировкой по диапазонам

Нужно сделать на подобие такой штуки с группировкой по h , d, w, y: (только не проценты , а значения).

введите сюда описание изображения

Имеется кафка куда складываются сообщения

Куда должны прийти это структура такого вида. Это как суммарно агрегационная результирующая сущность. Замечу что в одной сущности могут быть несколько полей (Likes\View допустим) диапазонов.

{
    ItemId: 1,
    Likes: {
         current: 3,
         prevHour: 4,
         prevWeek: 5,
    },
    Views: {
         current: 33,
         prevHour: 44,
         prevWeek: 55,
    }
}

Что я пытался

  1. Использовать KSQLDB , сделал агрегации вида:

    stats_likes_h stats_likes_w stats_views_h stats_views_w

Потом эти stream join в один, но оказывается что на текущий момент в KSQLDB никак нельзя взять со смещением офсет. Т.к. нужно не последние "корзинки" брать , а последние значение предыдущего часа\месяца\недели\года.

  1. хотел сделать MongoDB + свой сервис который разгребает очередь KAFKA , но тут возникла проблема , если 1 сообщения = 1 update в базу, нагрузка очень высока. Если пытаться в коде делать Kafka batching то возникают проблемы с commit таймаутами , идемпотентностью и т.д. т.к. для этого кафка не предназначена.

  2. дошли руки до TimescaleDB Тут есть материализованные представления с просчетом, соответственно и функция LAG\LEAD которые смогли сделать то что нужно

    select lag(value, 1) over (order by bucket), lag(value, 124) over (order by bucket), lag(value, 124*7) over (order by bucket) from stats_likes_h order by bucket desc limit 1

Так же и для view, а потом при выборки join. Но если у тебя много сущностей, а не только Likes | Views , то колво join так же увеличатся, а материализованное просчитанное представление НЕЛЬЗЯ сделать поверх другого просчитанного представления.

Я не чувствую что вариант с timescaleDB очень оптимальный. Вопрос куда смотреть ? Что еще можно пощупать? Какие еще базы данных существуют с continues queries(иногда называют continiues aggregation или materialize continiues aggregation)? В Apache там хрен ногу сведет , штук 20 похожих проектов, возможно не от апача...

В общем думаю ктото делал подобные вещи, жду рекомендаций.


Ответы (0 шт):