Qual è il metodo migliore per trasferire un'ampia gamma di dati in un altro PC in rete?

1

Ho alcuni dispositivi di rete (IOT) che contengono sensori di temperatura per raccogliere la temperatura dei serbatoi di miscelazione del latte e inviare quella temperatura a un altro computer collegato in rete. Ho più di 100000 di serbatoi per raccogliere i dati. L'intervallo di raccolta dati è di 5 secondi. È obbligatorio e non può cambiare l'intervallo di 5 secondi.

Poi in qualsiasi momento con un secondo danno al massimo 5 * 100000 valori di temperatura e ho bisogno di inviare quei dati al server (MSSQL) e c'è un altro software che riceve i dati dal DB e controlla il temperatura dei serbatoi.

Al momento ho usato il socket TCP / IP sincrono. Quando programmano i socket, aprono porte arbitrarie. Quindi rallentano il sistema. Qualche soluzione per questo tipo di scenario?

    
posta Elshan 28.06.2016 - 12:27
fonte

2 risposte

3

Sembra che il tuo database arrivi troppo presto.

Vorrei andare con una soluzione di accodamento leggera forse ZeroMQ? (non sai cosa puoi eseguire sui tuoi dispositivi)

la cosa chiave che penso è che "un altro software" risponda direttamente al messaggio prima di inserirlo nel DB.

Ciò ridurrebbe il carico del database solo agli inserimenti e consentirà di aumentare il numero di "un altro software" I lavoratori che ascoltano la coda per far fronte al carico AND / O suddividono i sensori in modo che facciano riferimento a più code / server

    
risposta data 28.06.2016 - 14:54
fonte
0

Quindi, per essere chiari:

ogni 5 secondi un serbatoio invierà la sua temperatura a un server che lo memorizza in un DB e poi un altro programma server leggerà questo valore e invierà un messaggio al serbatoio per regolare la sua temperatura?

Se è così, la soluzione è abbastanza semplice: invia il comando di regolazione direttamente all'altro dispositivo IoT che controlla la temperatura, manda in batch i dati temporanei e invialo in blocchi più grandi al server DB per scopi di reporting.

Altrimenti, se si sta tentando di mantenere una trasmissione diretta dei dati sul server, utilizzare un socket UDP che invii i dati a un socket senza tutto il sovraccarico TCP. È possibile archiviare i dati ricevuti in memoria o un file flat per serbatoio è più facile da gestire rispetto a un DB di SQL Server che riceve molti aggiornamenti.

    
risposta data 28.06.2016 - 12:42
fonte

Leggi altre domande sui tag