stringa di processo prima o dopo l'inserimento in mysql

1

Ho una rete di dispositivi in cui ogni dispositivo ha diversi sensori (temperatura, umidità, ecc.). Ogni dispositivo carica dati meteo misurati grezzi ogni 10 secondi su un'API REST apache / php / mysql. Ci sono alcuni 100 dispositivi che inviano dati e questo diventerà più nel tempo. Attualmente i dati vengono aggiunti a una tabella mysql senza alcuna elaborazione.

Il formato della stringa del messaggio del dispositivo è simile a:

&01AA*020122#

Il che significa che il sensore 01 ha misurato AA e sensore 02 misurato 0122 .

Voglio mettere i valori esadecimali convertiti decimali in una tabella in modo che possano essere ulteriormente elaborati. Quello che faccio ora è eseguire uno script ogni minuto per vedere quali nuove stringhe sono state aggiunte al database. Quindi convertirò queste stringhe in valori decimali e li inserirò in una tabella.

Per quanto riguarda le prestazioni, ho la sensazione che sondare nuovi dati ogni minuto sia piuttosto sciocco.

Quale sarebbe il modo migliore per farlo?

  1. fa in modo che il resto api divida la stringa e converta i valori esadecimali in valori decimali e li inserisca immediatamente nel database

  2. esegue il polling del database per le nuove stringhe inserite e converte i valori esadecimali

  3. usa un trigger di insert mysql per elaborare la stringa dal database

  4. altre idee.

posta Enrico 03.07.2015 - 16:39
fonte

2 risposte

3

L'opzione migliore è quella con il minor numero di cose che possono andare storte. Questa è "l'API Web converte il valore e lo inserisce nel database". Non è necessaria alcuna quantità significativa di calcolo e le modifiche non sono nemmeno necessarie per convertirle prima in decimali. Puoi inserire utilizzando la funzione unhex in MySQL ( documenti ) .

Se volevi qualcosa di un po 'più intraprendente, questo è il modello per una coda dei messaggi dove qualcosa sarebbe ottenere i dati dai sensori e inserirli in una coda di messaggi come produttore, quindi qualcos'altro prende i messaggi dalla coda come consumatore e fa qualcosa con loro (li inserisce in un database). Ulteriori informazioni su questo tutorial su RabbitMQ .

Detto questo, la coda dei messaggi è eccessiva e puoi semplicemente inserirla nel database dall'inizio. Fallo.

    
risposta data 03.07.2015 - 20:15
fonte
2

Opzione 1. I dati di stringa devono essere definitivamente elaborati in tipi di dati più appropriati prima dell'inserimento. Il fatto che le misure siano fornite in formato esadecimale è un dettaglio del trasferimento dei dati e non è importante quando si tratta di archiviazione (essendo esadecimale semplicemente una rappresentazione di numeri). Si noti che lo script non converte i dati di stringa in decimali (che è solo un'altra rappresentazione), ma in numeri interi (che è un tipo di dati).

Inoltre, l'elaborazione dei dati consente di normalizzare la tabella. La stringa grezza non è nemmeno la forma normale st , in quanto contiene un gruppo ripetuto di dati composti (numero sensore e misura).

    
risposta data 03.07.2015 - 20:14
fonte

Leggi altre domande sui tag