не, чуток не то. Исторические данные могут прийти и несколько дней спустя. Свежие данные имеют приоритет, но при этом обрабатывать исторические данные тоже нужно.
Пока я остановился на таком варианте:
— сортирую и сливаю в непрерывные сегменты пришедший пакет
— затем новые сегменты вливаю в кеш, который содержит разреженные данные и заодно оставляю себе те сегменты, которые после слияния длиннее лимита
— затем пробегаюсь по остальным каналам в кеше, проверяя содержат ли они те же данные что и отобранные сегменты
— при совпадении — выдаю обнаруженные куски, заодно удаляя их из кеша
недостатком такого метода является фрагментация кеша. Например, для примера выше, приход индексов 4 и 5 (с пропуском 3) сгенерировал бы сегмент "45" и пришедшая позже "3" зависла бы в воздухе навсегда.
В качестве альтернативы можно установить дискретный шаг, размером с лимит. Но тогда, например, ".4" + "5." останутся "выпавшими".