Я пишу приложение на C ++, в котором мне нужно реализовать очередь сообщений, которая будет непрерывно получать данные (т.е. объект) из сети, каждый объект имеет ключ (например, название компании, скажем, Oracle, Google и т. Д.). Если потребитель очереди медленнее, у меня может быть огромное количество элементов в очереди (максимальный предел может быть сохранен в миллионах).
Требование: если объект с ключом XYZ прибыл из сети и очередь уже имеетобъект с ключом XYZ, то мне нужно перезаписать этот объект, и положение этого объекта в очереди должно остаться прежним. Например, если объект с ключом «Oracle» со значением 25 поступил из сети, а объект с ключом «Oracle» и значением 10 уже присутствует в позиции 120 в очереди, то мне нужно перезаписать значение 10 значением 25и позиция должна оставаться 120.
Я пытаюсь реализовать это, используя потокобезопасную очередь и установить, по прибытии объекта из сети сначала я проверяю, присутствует ли ключ в наборе, если нет ключа, я добавляю ключ вустановить и добавить объект в очередь. Если ключ присутствует, тогда я выполняю линейный поиск ключа в очереди и перезаписываю объект.
Производительность будет очень низкой, если я получу очень частые обновления для ключей, которые уже находятся в очереди.
Есть ли эффективный способ реализовать это? Заранее спасибо.