Domanda

Voglio una struttura dati che consenta l'esecuzione di query quanti articoli ci sono per ultimi X minuti.Un elemento può essere semplicemente un identificatore semplice o una struttura dati più complessa, preferibilmente il timestamp dell'elemento sarà nell'elemento, piuttosto che memorizzato all'esterno (come un hash o simile, non vorrei avere problemi con più elementi che hanno lo stesso marca temporale).

Finora sembra che con LINQ potrei facilmente filtrare gli elementi con timestamp maggiore di un determinato tempo e aggregare un conteggio.Anche se sono ancora riluttante a provare a inserire elementi specifici di .NET 3.5 nel mio ambiente di produzione.Ci sono altri suggerimenti per una struttura dati simile?

L'altra parte che mi interessa è invecchiamento vecchi dati in uscita, se chiederò solo il conteggio degli elementi meno di 6 ore fa, vorrei che qualsiasi cosa più vecchia fosse rimossa dalla mia struttura dati perché potrebbe trattarsi di un programma di lunga durata.

È stato utile?

Soluzione

A questo scopo è possibile utilizzare un semplice elenco collegato.

Fondamentalmente aggiungi nuovi elementi alla fine e rimuovi elementi troppo vecchi dall'inizio, è una struttura dati economica.

codice-esempio:

list.push_end(new_data)
while list.head.age >= age_limit:
    list.pop_head()

Se l'elenco sarà abbastanza fitto da giustificare il taglio di pezzi più grandi di uno alla volta, allora sono d'accordo dmo, utilizzare una struttura ad albero o qualcosa di simile che consenta la potatura ad un livello più alto.

Altri suggerimenti

Penso che una considerazione importante sarà la frequenza delle interrogazioni rispetto alla frequenza delle interrogazioni.aggiungere/rimuovere.Se eseguirai query frequenti (soprattutto se avrai una vasta collezione) un B-tree potrebbe essere la strada da percorrere:

http://en.wikipedia.org/wiki/B-tree

Potresti far esaminare qualche thread e ripulire periodicamente questo albero o renderlo parte della ricerca (di nuovo, a seconda dell'utilizzo).Fondamentalmente, eseguirai una ricerca nell'albero per trovare il punto "x minuti fa", quindi conterai il numero di bambini sui nodi con orari più recenti.Se si mantiene aggiornato il numero di figli sotto i nodi, questa somma può essere eseguita rapidamente.

una cache con scadenza scorrevole farà il lavoro....

inserisci i tuoi oggetti e la cache gestisce l'invecchiamento ....

http://www.sharedcache.com/cms/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top