создания аккаунта и время когда обновился баланс
была мысль сделать RMT и последовательно инкрементом подливать сначала новые аккаунты, потом обновленные балансы.
Но понял, что при дневном партиционированнии по дате создания - не получится нормально оптимайзить за предыдущий день, тк апдейты могут быть по очень старым аккаунтам, как советуют тут
https://kb.altinity.com/altinity-kb-queries-and-syntax/altinity-kb-final-clause-speed/
Оптимайзить всю таблицу может быть со временем дорого, сейчас 10кк строк, но очень быстро растем
Хотел бы уточнить будет ли работать в целом такая схема и есть ли варианты по оптимизации?
select * from table_name final prewhere id= X - в вашем кейсе без потерь ибо ид это праймари кей для реплейсинг табы. Партицирование тут мимо, но если хочется поделить - может помочь "бакетинг", т.е. по префиксу ид (если uuid) или ренжу / остатку от деления на N - зависит от типа ид короче
id-bigserial вообще)
А цель - получать текущий или на конец конкретного дня баланс? Если да, то неплохо подойдет AggregatingMergeTree.
Цель текущий всегда актуальный иметь = стейт из пг в кх
Тогда подойдет и RMT, только не надо партиционировать по периоду. Например по id%100. Тогда парты будут регулярно мержиться и оставаться небольшими.
а перфоманс джоинов на final сильно проседать будет?
Да, может просесть весьма сильно, но зачем вам final? Дедуплицируйте в селекте. SELECT ... FROM rmt_table ORDER BY updated_at DESC LIMIT 1 BY id А клик пусть себе мержит в фоне.
Благодарюб не знал про LIMIT BY
Обсуждают сегодня