Utilizzo di dati e intervalli di tempo

4

Ho un'applicazione che la misura continuamente. (Circa ogni secondo - dipende dal dispositivo) Ad esempio, diciamo che i dati sono CPUTemp (utilizzati come esempio in una risposta a una domanda correlata: Clean Architecure: creazione di un'entità da un insieme di altre entità )

I dati di ogni misurazione sono scritti nella tabella CPU_TEMP_SAMPLE .

Alla fine di ogni giornata comprime i dati calcolando il minimo, il massimo e la media per quel giorno e scrivendo i dati su una tabella CPU_TEMP_DAY .

Ho un CpuTempRepository che ottiene i dati calcolandoli dalla tabella CPU_TEMP_SAMPLE (se è per il giorno corrente) o semplicemente leggendolo dalla tabella CPU_TEMP_DAY se è per un giorno precedente.

Voglio essere in grado di ottenere la lettura minima e massima per intervalli specifici da CPU_TEMP_SAMPLE . (Quindi, invece di restituire il campione di temperatura massima per quel giorno, desidero ottenere la temperatura massima registrata su 30 secondi, quindi in realtà sto comprimendo 30 secondi di misure in un campione)

Come potrei fare questo? Un modo è quello di scrivere i dati min, max e medi di ogni intervallo su una nuova tabella CPU_TEMP_INTERVAL ogni 30 secondi e quindi ottenere il valore massimo e amp; Minimo da lì, ma non sono sicuro se questo è il modo giusto - cosa succede se ho bisogno di calcolare per intervalli diversi?

    
posta HPage 27.04.2017 - 09:18
fonte

2 risposte

1

L'esecuzione di più query in un breve periodo di tempo e quindi la ripetizione del processo metterebbe in evidenza il tuo database e consumerebbe molte più risorse.

Puoi inviare i dati a un tag di coda con timestamp

timestamp : measurement

quindi avere un lavoratore che elabora la coda e esegue query al database.

Puoi anche lavorare temporaneamente con la cache di memoria e creare un Set ogni ora che contiene le misurazioni effettuate ogni 30 secondi, inviare i dati serializzati da memorizzare nel database.

Esistono altri approcci, ma pensate che non è necessario archiviare tutti i database in piccoli intervalli, anche se dubito che al giorno d'oggi sia un problema con un database in grado di funzionare bene sotto stress.

    
risposta data 27.04.2017 - 10:23
fonte
0

Non dici che tipo di sistema stai lavorando. Se la temperatura è compresa nell'intervallo 0-255 °, può essere memorizzata come un singolo byte per campione. Quindi memorizzare un intero giorno di campioni di temperatura a 1 campione al secondo = 1 byte * 60 campioni / minuto * 60 minuti / ora * 24 ore / giorno = 86.400 byte / giorno, o circa 86k. Questo è arachidi sulla maggior parte dei sistemi moderni, compresi i telefoni cellulari. Sui sistemi embedded più piccoli, potrebbe essere un grosso problema. Ma se puoi risparmiare ~ 90k, basta memorizzare un tavolo localmente per le temperature e fare i calcoli al volo quando richiesto.

    
risposta data 25.09.2017 - 04:29
fonte

Leggi altre domande sui tag