Possiedo un'applicazione Windows .Net che riceve continuamente dati da un dispositivo hardware. Inoltre, l'utente può modificare varie impostazioni e parametri dall'interno del software. Vorrei registrare tutti questi dati in una qualche forma di database, sia i dati che arrivano dall'h / w, sia le impostazioni modificate dall'utente. L'intenzione è di consentire all'utente di selezionare un punto nel tempo e vedere una "istantanea" dei valori dei dati h / w e delle impostazioni del software presenti in quel momento.
Numeri: - Ci saranno circa 200 valori da registrare, e dovrebbe essere possibile ottenere un'istantanea con una risoluzione di 100 ms (che è all'incirca l'intervallo di ricezione dei dati dall'h / w). Inoltre, gli utenti dovrebbero essere in grado di ottenere un'istantanea fino a 60 ore nel passato.
Una soluzione che ho pensato era quella di registrare i valori solo mentre cambiano (ad esempio quando i dati vengono ricevuti dall'h / w o quando l'utente cambia un'impostazione). Tuttavia, utilizzando questo approccio, posso vedere che è abbastanza difficile e / o lento ricreare un'istantanea dai dati memorizzati. Dovrei trovare l'ultimo valore registrato per ciascuno dei 200 elementi di dati, prima del tempo richiesto per l'istantanea. Sospetto che ciò richiederebbe anche che il livello dei dati richieda la conoscenza di quali punti dati costituiscono un'istantanea (idealmente il "servizio" dovrebbe essere abbastanza stupido, e basta solo mantenere i valori lanciati e restituire le istantanee come richiesto).
Ho anche pensato di mantenere una cache dei 200 valori di dati nell'applicazione, che aggiorno ogni volta che si verifica un'azione (i dati di h / w sono ricevuti, l'utente cambia un'impostazione). Un timer separato potrebbe quindi trasferire l'intera raccolta al livello dati ogni 100 ms. Memorizzando ognuno di questi come record con data e ora, è la mia istantanea , rendendo banale il successivo recupero. Il rovescio della medaglia è che sta persistendo un sacco di dati in più, soprattutto perché la maggior parte di questi oltre 200 valori cambierà raramente.
Infine, un'altra considerazione è come "troncare" i vecchi dati, ovvero eliminando i dati che sono più vecchi di 60 ore quando arrivano nuovi dati.
Va bene quindi non sono "big data", e scrivere su un database ogni 100 ms non è particolarmente intenso, ma non è qualcosa che ho dovuto fare prima (l'esperienza del database è stata generalmente limitata alle applicazioni di inserimento dati CRUD! ). Sarei interessato a opinioni sugli approcci proposti, pensieri su soluzioni alternative e qualsiasi quadro o database che potrebbero essere utili.