Ich habe ungefähr 6,00,000 entries in MongoDB
im folgenden Format:
wo
Ich möchte die Top 1000 Tupel zwischenspeichern, sagen wir mal, um Datenbank nicht jedes Mal abzufragen.
Wie erstellt man in Python einen LRU-Cache? Oder gibt es dafür bekannte Lösungen?
Der LRU-Cache in Python3.3 hat O (1) -Einfügung, Löschung und suchen.
Der Entwurf verwendet eine kreisförmige doppelt verknüpfte Liste von Einträgen (angeordnet älteste zu neuesten) und eine Hash-Tabelle, um einzelne Verknüpfungen zu finden. Cache-Treffer verwenden die Hash-Tabelle, um den relevanten Link zu finden und ihn an den Anfang der Liste zu verschieben. Cache-Fehler löschen den ältesten Link und erstellen einen neuen Link am Anfang der verknüpften Liste.
Hier ist eine vereinfachte (aber schnelle) Version in 33 Zeilen von sehr einfachem Python (nur einfache Wörterbuch- und Listenoperationen verwendend). Es läuft auf Python 2.0 und höher (oder PyPy oder Jython oder Python3.x):
%Vor%Neben der in Python 3.2 enthaltenen Version gibt es im Python-Kochbuch LRU-Cache-Rezepte, einschließlich diese von Python-Core-Entwickler Raymond Hettinger.
Python 3.2 functools
enthält einen LRU-Cache . Sie können es leicht aus repo auswählen und prüfen, ob Sie es anpassen müssen arbeite mit Python 2 (sollte nicht zu schwer sein - vielleicht itertools
anstelle von bestimmten eingebauten - fragen Sie, wenn Sie Hilfe brauchen) und fertig sein. Sie müssen die Abfrage in eine aufrufbare Datei umbrechen und sicherstellen, dass sie von den (hashbaren) Funktionsargumenten abhängt.