Frage

Ich möchte eine Datenstruktur, die Abfragen ermöglicht Wie viele Artikel sind zuletzt enthalten? X Protokoll.Ein Element kann nur ein einfacher Bezeichner oder eine komplexere Datenstruktur sein. Vorzugsweise befindet sich der Zeitstempel des Elements im Element und wird nicht außerhalb gespeichert (als Hash oder ähnliches). Ich möchte keine Probleme haben, wenn mehrere Elemente dasselbe haben Zeitstempel).

Bisher scheint es, dass ich mit LINQ problemlos Elemente mit einem Zeitstempel, der größer als eine bestimmte Zeit ist, filtern und eine Zählung zusammenfassen könnte.Allerdings zögere ich noch, .NET 3.5-spezifische Dinge in meine Produktionsumgebung zu integrieren.Gibt es weitere Vorschläge für eine ähnliche Datenstruktur?

Der andere Teil, der mich interessiert, ist Altern alte Daten raus. Wenn ich nur nach der Anzahl der Elemente frage, die weniger als 6 Stunden zurückliegen, möchte ich, dass alles, was älter ist, aus meiner Datenstruktur entfernt wird, da es sich möglicherweise um ein Programm mit langer Laufzeit handelt.

War es hilfreich?

Lösung

Hierzu kann eine einfache verknüpfte Liste verwendet werden.

Grundsätzlich fügt man am Ende neue Elemente hinzu und entfernt zu alte Elemente am Anfang. Es handelt sich um eine billige Datenstruktur.

Beispielcode:

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

Wenn die Liste so voll ist, dass es gerechtfertigt ist, mehr als eins auf einmal abzuschneiden, dann stimme ich dem zu dmo, verwenden Sie eine Baumstruktur oder etwas Ähnliches, das einen Beschnitt auf einer höheren Ebene ermöglicht.

Andere Tipps

Ich denke, dass ein wichtiger Gesichtspunkt die Häufigkeit der Abfragen vs.Hinzufügen/Entfernen.Wenn Sie häufig Abfragen durchführen (insbesondere, wenn Sie über eine große Sammlung verfügen), ist ein B-Baum möglicherweise die richtige Wahl:

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

Sie könnten einen Thread diesen Baum regelmäßig durchgehen lassen und bereinigen oder ihn in die Suche einbeziehen (wiederum abhängig von der Verwendung).Im Grunde führen Sie eine Baumsuche durch, um die Stelle „vor x Minuten“ zu finden, und zählen dann die Anzahl der Kinder auf den Knoten mit neueren Zeiten.Wenn man die Anzahl der Kinder unter den Knoten aktuell hält, lässt sich diese Summe schnell zusammenstellen.

Ein Cache mit gleitendem Ablauf wird den Job erledigen ....

Packen Sie Ihre Gegenstände hinein und der Cache kümmert sich um die Alterung ...

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top