в отчете часть показателей является статическими, часть показателей динамическими
объем данных относительно большой (пара терабайт), поэтому выборка динамических показателей занимает львинную долю времени
как пример - пользователь может создавать форум, создавать обсуждения в рамках форумов, оставлять комментарии в рамках обсуждений
при выгрузке отчета есть статические показатели (ФИО пользователя, названия форума, описание обсуждения и т.д.) и есть динамические - количество форумов, количество обсуждений, количество комментариев и т.д.
есть отдельный сервис который занимается формированием отчета и он подписан на события в kafke (создание/изменение форума, обсуждения, комментария), события он записывает в базу, по которым и формирует отчет
проблема в том, что отчет формируется по дням (администратор может указать период формирования отчета) и создать какую-то мат вьюху не получится
была мысль делать агрегацию (по сути сумма всех событий за какой-то период) динамических показателей по дням и потом их просто группировать вместе за определенный срок при формировании отчета, но тут возникает такая проблема, что обновлять агрегаты этих динамических показателей по дням не так-то просто и выглядит это как велосипед
как лучше решить данную задачу? хотелось бы просто понять вектор движения
Вы, кажется, просите OLAP-движок. Возьмите условный кликхаус и делайте свои выборки за вменяемое время.
Кстати в кликхаусе materialized view обновляется автоматически, может быть удобно в вашем кейсе Materialized views in ClickHouse are implemented more like insert triggers. If there’s some aggregation in the view query, it’s applied only to the batch of freshly inserted data. Any changes to existing data of source table (like update, delete, drop partition, etc.) does not change the materialized view. https://clickhouse.com/docs/en/sql-reference/statements/create/view/
Если отчётов формируется много, то смотреть отдельную субд под олап. Если немного и перформанс олтп от них не страдает, то забить. Ну, если, конечно сам запрос уже оптимизирован :)
Обсуждают сегодня