Pregunta

Quiero una estructura de datos que permita realizar consultas. ¿Cuántos elementos hay en el último? X minutos.Un elemento puede ser simplemente un identificador simple o una estructura de datos más compleja, preferiblemente la marca de tiempo del elemento estará en el elemento, en lugar de almacenarse afuera (como un hash o similar, no querría tener problemas con varios elementos que tienen el mismo marca de tiempo).

Hasta ahora parece que con LINQ podría filtrar fácilmente elementos con una marca de tiempo mayor que un tiempo determinado y agregar un recuento.Aunque todavía dudo en intentar incorporar elementos específicos de .NET 3.5 en mi entorno de producción.¿Hay alguna otra sugerencia para una estructura de datos similar?

La otra parte que me interesa es envejecimiento Se eliminan los datos antiguos. Si solo voy a solicitar recuentos de elementos de hace menos de 6 horas, me gustaría que todo lo anterior se elimine de mi estructura de datos porque puede ser un programa de larga duración.

¿Fue útil?

Solución

Para esto se puede utilizar una lista enlazada simple.

Básicamente, agrega elementos nuevos al final y elimina elementos demasiado antiguos desde el principio; es una estructura de datos barata.

código de ejemplo:

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

Si la lista estará lo suficientemente ocupada como para justificar el corte de piezas más grandes que una a la vez, entonces estoy de acuerdo con dmo, utiliza una estructura de árbol o algo similar que permita realizar podas a mayor nivel.

Otros consejos

Creo que una consideración importante será la frecuencia de las consultas vs.añadiendo/eliminando.Si realiza consultas frecuentes (especialmente si tiene una colección grande), un árbol B puede ser el camino a seguir:

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

Podrías revisar algún hilo y limpiar este árbol periódicamente o hacerlo parte de la búsqueda (nuevamente, dependiendo del uso).Básicamente, harás una búsqueda en árbol para encontrar el lugar "hace x minutos" y luego contarás el número de niños en los nodos con tiempos más nuevos.Si mantiene actualizado el número de hijos bajo los nodos, esta suma se puede realizar rápidamente.

un caché con vencimiento deslizante hará el trabajo...

guarda tus artículos y el caché se encarga del envejecimiento...

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top