я на синтетическом примере не очень понимаю, что там вообще происходит.
У нас в флюссонике есть подобное место, где надо складировать в памяти данные про сегменты видео.
Каждый сегмент принадлежит стриму и у него есть utc.
Вот эти utc div 3600 = hour
Составной ключ получается:
`{"ort", 450955, 1623438607}`
Второе число — это номер часа. У тебя получаются таким образом бакеты, которые вполне неплохо режут пространство и их сильно меньше.
Дальше если ты знаешь границы, то можешь сразу высчитать готовые бакеты и пофильтровать два на краях