Sto creando una soluzione Internet of Things che ha un numero di feed in tempo reale. Ho bisogno di prendere un paio di decisioni di progettazione per quanto riguarda l'archivio dati e la segnalazione e la ricerca di input.
Ho due modelli di implementazione, locale in cui un piccolo server Linux cattura più flussi di solito un nuovo punto dati ogni secondo e la lunghezza della registrazione è piccola, in pratica un messaggio di formato fisso di circa 20 byte. L'altro modello è basato su cloud, dove il tasso di transazione sarà molto più alto, fino a 1000 punti dati al secondo.
Concentrandomi innanzitutto sul modello locale, il mio prototipo utilizza SQLite sotto MONO e funziona bene in un modo RDMS tradizionale. Tuttavia, sono consapevole del fatto che RDBMS non è ottimale per i sistemi di serie storiche e probabilmente una soluzione NOSQL potrebbe essere migliore.
Sto avendo un ripensamento sull'approccio SQL a causa dei miei requisiti di analisi in tempo reale. Voglio essere in grado di riferire facilmente su SUM, COUNT, MEDIA, MEDIA, SD, MIN, MAX su potenzialmente tutti i set di dati della serie storica, in pratica il sistema la ricalcola per ogni nuovo punto dati. Anche se non ho eseguito alcun test delle prestazioni, posso vedere se ho un anno o più dati la dimensione del set di dati sarà piuttosto grande (20 byte al secondo in un anno è 600 MB e potrei avere fino a 30 diverse serie temporali set di dati) e non saranno grandi per il calcolo in tempo reale delle medie ecc. in SQL normale. Voglio anche mantenere basse le dimensioni / il costo del server, quindi non sarò in grado di aggiungere gocce di CPU o memoria, ma lo spazio su disco dovrebbe essere OK.
L'altra opzione che ho è che il mio sistema può memorizzare il delta (modifiche) ai feed in tempo reale invece del normale punto dati, che farà risparmiare circa l'80% dello spazio su disco. Tuttavia, non conosco un modo semplice per fare calcoli come le medie correnti se sto memorizzando delta (per quanto ne so non è possibile con le istruzioni SQL standard, ma potrei sbagliarmi).
Dato il mio caso di utilizzo sopra ho 3 domande:
1) Dovrei considerare seriamente un archivio dati NOSQL? Hai qualche suggerimento sui vantaggi di un negozio NOSQL per questo modello?
2) Come posso fare in modo ottimale calcoli in tempo reale come la media senza molta complessità o hardware? Ho opzioni di piattaforma di MONO o NODE su Linux o Windows.
3) Come eseguire calcoli di set in tempo reale efficienti (in particolare le medie che costituiranno la maggior parte dei calcoli) su SQLite o su un DB NOSQL quando sto memorizzando delta?