Collezione per i dati delle serie temporali in .Net

0

Sto comunicando con un dispositivo che restituisce i dati registrati in circa questo formato:

{ timestamp of first data set, [ device1value, device2value, device3value] }, 
{ timestamp of second data set, [ device1value, device2value, device3value] },
...
...

A seconda di ciò che chiedo, in un set di dati può esserci un numero variabile di "valori dispositivo" e ogni valore può essere di un tipo diverso. Ad esempio, per prima cosa può essere un galleggiante che rappresenta la temperatura e così via. L'ordine dei valori del dispositivo e il loro tipo è noto in anticipo. Realisticamente il numero di "valori del dispositivo" è compreso tra 1 e 10.

Al momento memorizzo i dati come

SortedList<DateTime, List<object>>

Quindi la prima domanda potrebbe essere se è sensato usare un archivio KV per i dati delle serie temporali.

A causa di alcuni vincoli, il dispositivo può darmi solo una manciata di set di dati alla volta, e quindi devo scorrere il risultato di una query e aggiungerli uno alla volta alla raccolta "completa" (poiché SortedList non ha un AddRange ).

var completeResult = new SortedList<DateTime, List<object>>();

for (int i = 0; i <= cycles; i++)
{
    // Simplified, but to give an impression of what's happening
    SortedList<DateTime, List<object>> fragment = device.GetDataSets(offset: i * 100, numberOfValues: 100);
    foreach (var dataset in fragment)
    {
        completeResult.Add(dataset.Key, dataset.Value);
    }
}
return completeResult;

I dati che recupero sono già ordinati. È quindi eccessivo usare SortedList invece di un altro tipo di raccolta?

Questo è solo per memorizzare il risultato. Perché i dati siano utili, ho bisogno di una raccolta separata per ogni "valore del dispositivo", che verrà poi utilizzato altrove nell'applicazione.

Va bene solo creare un nuovo SortedList<DateTime, object> per ogni "valore del dispositivo" o lo faresti diversamente? Se la risposta alla prima domanda "è ragionevole utilizzare un archivio KV per i dati delle serie temporali" è "no", come dovrei farlo?

Il mio pensiero immediato è quello di creare una classe semplice con campi per Timestamp e Valore e archiviarli in una lista < & gt ;. Sebbene in qualche modo questo non sia necessario.

Obiettivi:
L'obiettivo principale è quello di avere il minor numero possibile di errori nel codice, e di rendere i dati più facili da usare possibile altrove nel codice (per tracciare un grafico dei valori per un singolo "valore dispositivo", o memorizzarlo in un DB). Mi piace anche che il codice sia veloce, ma questa è una priorità bassa in questo scenario.

    
posta Walkingsteak 25.01.2016 - 16:15
fonte

0 risposte

Leggi altre domande sui tag