Question

Je veux une structure de données qui permettra d'interroger combien d'articles en dernier X minutes.Un élément peut simplement être un simple identifiant ou une structure de données plus complexe, de préférence l'horodatage de l'élément sera dans l'élément, plutôt que stocké à l'extérieur (comme un hachage ou similaire, je ne voudrais pas avoir de problèmes avec plusieurs éléments ayant le même horodatage).

Jusqu'à présent, il semble qu'avec LINQ, je pourrais facilement filtrer les éléments dont l'horodatage est supérieur à une heure donnée et regrouper un nombre.Bien que j'hésite encore à essayer d'intégrer des éléments spécifiques à .NET 3.5 dans mon environnement de production.Existe-t-il d'autres suggestions pour une structure de données similaire ?

L'autre partie qui m'intéresse est vieillissement anciennes données, si je demande uniquement le nombre d'éléments il y a moins de 6 heures, j'aimerais que tout ce qui est plus ancien que cela soit supprimé de ma structure de données, car il peut s'agir d'un programme de longue durée.

Était-ce utile?

La solution

Une simple liste chaînée peut être utilisée pour cela.

Fondamentalement, vous ajoutez de nouveaux éléments à la fin et supprimez les éléments trop anciens dès le début, c'est une structure de données bon marché.

exemple de code :

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

Si la liste est suffisamment chargée pour justifier de couper des morceaux plus gros qu'un à la fois, alors je suis d'accord avec démo, utilisez une structure arborescente ou quelque chose de similaire qui permet l'élagage à un niveau supérieur.

Autres conseils

Je pense qu'une considération importante sera la fréquence des requêtes par rapport aux requêtes.ajout/suppression.Si vous effectuez des requêtes fréquentes (surtout si vous avez une grande collection), un arbre B peut être la solution :

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

Vous pouvez faire parcourir un fil de discussion et nettoyer périodiquement cette arborescence ou l'intégrer à la recherche (encore une fois, en fonction de l'utilisation).Fondamentalement, vous effectuerez une recherche arborescente pour trouver l'endroit "il y a x minutes", puis compterez le nombre d'enfants sur les nœuds avec des heures plus récentes.Si vous maintenez à jour le nombre d’enfants sous les nœuds, cette somme peut être effectuée rapidement.

un cache à expiration glissante fera l'affaire....

remplissez vos objets et le cache gère le vieillissement....

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top