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.