Sto cercando di progettare e implementare una soluzione per il seguente problema che sto affrontando in uno dei miei progetti.
Ci sono n (diciamo 30) client che mi inviano punti dati del modulo {timestamp, object}, dove 'timestamp' arriva in ordine rigorosamente crescente.
I (server) necessario ascoltarli e elaborare i dati aggregati di tutti i client per ciascun timestamp nei seguenti casi:
- Ho sentito da tutti e 30 i clienti per un singolo timestamp.
- Vado in time in attesa di sentire da un sottoinsieme dei client. Questo timeout inizia dopo che ho ricevuto i dati per un timestamp per la prima volta.
- Un sottoinsieme di client invia dati di data e ora più alti di quelli che devo elaborare (in questo caso dovrei elaborare prima del timeout per qualsiasi dato aggregato).
C'è un modo migliore di mantenere bitmap di 30 client per ogni timestamp, utilizzando thread in background per controllare continuamente le bitmap e ricevere messaggi dal processo di listener forked se viene visualizzato un timestamp più alto per qualsiasi client? Vorrei qualcosa di veloce perché la quantità di dati da ricevere in un'ora è di circa 200 GB.
Qualsiasi suggerimento è apprezzato, non ho molta esperienza nella programmazione di sistemi C ++. Si prega di commentare se avete bisogno di ulteriori dettagli su qualsiasi cosa, mi scuso per aver perso qualcosa.
Modifica: ho letto su ZeroMQ, Kafka e RabbitMQ. MQ è un buon modello per questo tipo di problema ?, in particolare con la quantità di dati che devo elaborare?