Wie implementiert man einen LRU Cache mit Erlang?Erlang LRU Cache
Top Github-Projekt spielte war fogfish/cache, aber Segmented Tisch war nicht ganz fit für meine Daten.
barrel-db/erlang-lru wurde eine Liste verwendet. Nach dem Testen wäre es langsam, wenn zu viele Daten vorhanden wären.
Ich denke, das Problem war hier.
move_front(List, Key) -> [Key | lists:delete(Key, List)].
Mit Java, eine bessere Umsetzung wurde mit einem hashmap und LinkedListlike this
Ich versuchte, ein LinkedList zu tun, und dann realisiert, dass VerketteteListe nicht gute Idee für Erlang, like this thread.
ist die Frage, wie man einen LRU-Cache mit Erlang macht?
Ich denke, Erlang zu tun niedrigen Level-Cache zu einem hohen Pegel ist und zur Zeit hat Erlang einige ähnliche Funktionen in Kern (wie ETS http://erlang.org/doc/man/ets.html), haben Sie also einige dieser Funktionen getestet, bevor Sie externe Projekte verwenden? –
@MathieuK. Danke für Ihre Kommentare. Ja, ich habe es versucht. Das Schlüsselproblem ist LRU. Ich habe versucht, eine Tabelle zu verwenden, um die access_time zu speichern, aber für jedes Lesen/Update muss ich die Tabelle aktualisieren (löschen und einfügen). Ich frage mich, ob dies in einer besseren Methode gemacht werden könnte? – user3644708
Ich habe keine Antwort auf Ihre Frage. Wenn Sie performanten LRU-Cache in Erlang implementieren möchten, ist einer der besten Ansätze, externen Code zu verwenden, der mit [ports] (http://erlang.org/doc/reference_manual/ports.html) oder [NIF] (http://erlang.org/doc/tutorial/nif.html). C-Programmierung ist nicht meine Lieblingsdomäne, aber wenn Sie ein Beispiel für die Implementierung von C-Code für Erlang haben möchten, können Sie [Strahlquellcode] (https://github.com/erlang/otp/tree/maint/erts/ Emulator/Strahl). –