У нас есть система обмена сообщениями, в которой один модуль отправляет несколько сообщений другому удаленному модулю с высокой скоростью. Принимающий модуль декодирует это сообщение в определенном формате и пересылает его в два потока. Один называется потоком журнала, а другой - потоком пересылки.
Прежде чем мы отправим это сообщение в эти темы, нам нужно выполнить некоторую группировку этих сообщений.
Обратите внимание, что эти сообщения приходят с высокой скоростью около 800 в секунду.
Структура оповещения следующая:
- тип INT
- INT Идентификатор системы отправки
- INT Recpt ID системы
- INT отметка времени
- INT коды
- INT Порт источника
- INT Порт назначения
- IP-адрес источника (ipv4 или ipv6)
- IP-адрес назначения (ipv4 или ipv6)
В конце матча нам нужно сохранить структуру со следующими деталями
struct{
INT COUNT
INT First Alert Timestamp
INT Last Alert Timestamp
INT First Alert ID
INT Last Alert ID
}
Для каждого предупреждения, которое соответствует 8 критериям, будет создана / выбрана группа, и количество будет увеличено вместе с другими деталями.
Поля IP-адреса могут быть структурой из 5 полей (тип адреса INT, адрес INT1, адрес INT2, адрес INT3 и адрес 4 INT) или могут быть преобразованы в строку и затем сохранены в структуре.
Мы довольно долго ломали голову, но не смогли найти структуру или алгоритм, достаточно эффективный, чтобы можно было использовать память и скорость.
Поэтому подумал о том, чтобы обратиться к вам за помощью.