Mi è stato chiesto di sviluppare un'applicazione di "telemetria" che registra i dati generati da un dispositivo hardware, che leggo ogni 100 ms.
Ci sono circa 250 punti dati (valori a 32 bit), ma solo un sottoinsieme di questi (ad esempio 30-50) verrà restituito ogni 100ms letti, quindi ci vorranno più letture prima che io abbia tutti i 250 dati punti. Fuori dai valori del punto dati letto, è probabile che solo un piccolo numero sia cambiato da quando sono stati letti gli stessi punti dati - alcuni cambiano ogni 100ms, altri forse ogni pochi secondi, mentre altri molto raramente (o addirittura mai).
I requisiti principali del sistema sono: -
- La possibilità di tracciare uno o più punti di dati nel tempo, con una risoluzione di 100 ms
- La possibilità di visualizzare i valori di tutti i 250 punti dati in un particolare momento
- L'applicazione deve memorizzare le ultime 60 ore di dati
Sto cercando alcune considerazioni sul modo migliore per affrontarlo, in particolare su come archiviare i dati in un modo che supporti la segnalazione richiesta. Finora sto virando verso questa idea: -
Gestisco un "dizionario" di tutti i 250 punti dati, aggiornando i valori dopo ogni lettura. Ogni 100 ms scrivo tutti 250 valori nel mio archivio dati. È facile da implementare e facile interrogare i dati per soddisfare i requisiti. Il rovescio della medaglia è che non è un uso particolarmente efficiente dello storage (ma hey - lo spazio su disco è economico al giorno d'oggi).
In alternativa, sempre a 100 ms, potrei memorizzare solo i valori che sono cambiati dall'ultima lettura, tuttavia questo diventa più difficile da implementare, specialmente quando si tratta di eseguire query. Per esempio. per il requisito n. 2, dovrei costruire una "istantanea" attraversando di nuovo i dati dal punto temporale richiesto, cercando l'ultimo valore memorizzato di ciascun punto di dati.
Ora ho scritto tutto questo, penso di aver risposto alla mia stessa domanda. L'approccio "scrivi tutto" sembra essere un gioco da ragazzi. Tuttavia non ho avuto esperienza di questo tipo di archiviazione e analisi dei dati di massa, quindi sarei interessato a sapere cosa pensano gli altri.