Ich habe viele Analysedaten, die ich immer wieder sammeln möchte (sagen wir mal eine Minute). Die Daten werden an einen Prozess gesendet, der sie in einer ETS-Tabelle speichert und von Zeit zu Zeit von einem Timer gesendet wird eine Nachricht, um die Tabelle zu verarbeiten und alte Daten zu entfernen.Wie sollte ich ganze ETS-Tabellen automatisch ablaufen lassen und gleichzeitig die Gesamtgröße begrenzen?
Das Problem ist, dass die Datenmenge, die in wild kommt variiert, und ich brauche im Grunde genommen, um es zwei Dinge zu tun:
- Wenn die Datenmenge in den kommenden zu groß ist, die ältesten Daten fallen und schieben Sie die neuen Daten ein. Dies könnte als eine Warteschlange mit fester Größe angesehen werden. Wenn die Datenmenge das Limit erreicht, würde die Warteschlange beginnen, Dinge von vorne fallen zu lassen, wenn neue Daten in den Hintergrund treten.
- Wenn die Warteschlange nicht voll ist, aber die Daten für eine Weile dort sitzen wurden, wird es automatisch verwerfen (nach einer festgelegten Timeout.)
Wenn diese beiden Bedingungen gehalten werden, könnte ich im Grunde Angenommen, die Tabelle hat eine konstante Größe und alles darin ist neuer als X.
Das Problem ist, dass ich keinen effizienten Weg gefunden habe, diese beiden Dinge zusammen zu tun. Ich weiß, dass ich Matchspezifikationen verwenden könnte, um alle Ganzzahlen zu löschen, die älter als X sind, was ziemlich schnell sein sollte, wenn der Index der Zeitstempel ist. Obwohl ich nicht sicher bin, ob dies der beste Weg ist, den Tisch regelmäßig zu beschneiden.
Das zweite Problem ist, die Gesamttabellengröße unter einer bestimmten Grenze zu halten, was ich nicht so genau weiß. Eine Lösung besteht darin, ein Auto-Inkrement-Feld zu verwenden, das jedes Einfügen und wenn die Tabelle getrimmt wird, den ersten und letzten Index zu betrachten, den Unterschied zu berechnen und wiederum mit Match-Spezifikationen alles unter dem Schwellenwert zu löschen.
Nachdem dies alles gesagt wurde, habe ich das Gefühl, dass ich die ETS-Tabelle für etwas verwenden könnte, für das sie nicht vorgesehen war. Gibt es eine bessere Möglichkeit, Daten wie diese zu speichern, oder nähere ich mich dem Problem richtig?
Wie wird normalerweise auf die Daten zugegriffen? Verwenden Sie Ets, weil Sie normalerweise eine Datensuche nach Schlüssel benötigen? –
@SteveVinoski Nein, ich benutze ETS einfach, weil das Speichern einer Menge von Daten im Prozesszustand nicht als eine vernünftige Idee schien. –