2017-01-18 14 views
2

메시지 스트림 (Kafka)을 읽는 다중 수신기 스레드가 있습니다. 각 메시지에는 식별자가 있습니다. 소비자/스트림은 최소한 한 번은 소비를 보장합니다. 대부분의 경우 스트림은 메시지를 정확히 한 번 제공합니다. 예상 할 메시지 수는 미리 알 수 있습니다. 모든 메시지가 수신되면 모든 수신기 스레드를 종료하려고합니다. 메시지의 수는 5 천만 이하일 수 있습니다. 어떤 데이터 구조가 가장 적합합니까?동시 읽기 스트림에서 고유 한 요소 수를 계산하십시오.

std::set, std::map을 사용하고 스레드를 삽입 할 때마다 mutex을 사용하려고 생각했습니다. 실제로 단일 스레드가 그러한 유스 케이스에서 더 빠를 수 있습니까? 더 최적의 것이 있습니까?

+0

링 버퍼, IMO. –

답변

3

std::unordered_map이 좋을 것입니다. 하지만 과 같은 것을 사용하는 것이 좋습니다. HyperLogLog