Frage

Ist SQLAlchemy eine Art von Caching zu unterstützen, so, wenn ich immer wieder die gleiche Abfrage es gibt die Antwort aus dem Cache statt Abfrage der Datenbank ausgeführt? Ist das Cache automatisch gelöscht, wenn die DB aktualisiert wird?

Oder was ist der beste Weg, dies auf einem CherryPy + SQLAlchemy Setup zu implementieren?

War es hilfreich?

Lösung

Wir haben eine ziemlich umfassende Caching-Lösung, als ein Beispiel in Verbindung mit eingebetteten Haken, in 0,6. Es ist ein Rezept Abfrage Unterklasse, machen es bewusst, Beaker, und für explizite Abfragen sowie faul Lader über Abfrageoptionen Steuerung der Query-Caching ermöglichen.

Ich laufe jetzt ist es in der Produktion. Das Beispiel selbst ist in dem dist und die Intro Dokumentation steht unter http: // www.sqlalchemy.org/docs/orm/examples.html#beaker-caching .

UPDATE: dogpile Caching ersetzt > http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

Andere Tipps

Nicht eine Antwort auf Ihre zweite Frage, aber aus den Kommentaren in diesem Link gibt an, dass SQLAlchemy nicht Cachen unterstützt: http://spyced.blogspot.com/2007/01/why-sqlalchemy-impresses-me.html

Raven sagte ...

Does SQLAlchemy do any kind of internal caching?

For example, if you ask for the same data twice (or an obvious subset
of the initially requested data) will the database be hit once or twice?

I recently wrote a caching database abstraction layer for an
application and (while fun) it was a fair bit of work to get it to a
minimally functional state. If SQLAlchemy did that I would seriously
consider jumping on the bandwagon.

I've found things in the docs that imply something like this might be
going on, but nothing explicit.
4:36 PM

Jonathan Ellis sagte ...

No; the author of SA [rightly, IMO] considers caching a separate concern.

What you saw in the docs is probably the SA identity map, which makes it so 
if you load an instance in  two different places, they will refer
to the same object. But the database will still be queried twice, so it is
not a cache in the sense you mean.

SQLAlchemy unterstützt zwei Arten von Caches:

  1. Caching das Ergebnis eingestellt, so dass immer wieder die gleiche Abfrage Ausführen der Cache-Treffer anstelle der Datenbank. Es verwendet dogpile, die viele verschiedene Backends, einschließlich memcached, redis und grundlegende flache Dateien.

    unterstützt

    Docs sind hier: http: // docs. sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

  2. Caching das query Objekt, so dass Python-Interpreter nicht manuell muss den Query-String jedes Mal wieder zusammenbauen. Diese Abfragen werden genannt baked queries und der Cache wird baked genannt. Grundsätzlich speichert es alle Aktionen sqlalchemy, bevor man die Datenbank übernimmt - es ist nicht auf Datenbankgespräche nicht abgeholzt. Erstes Benchmarks zeigt speedups von bis zu 40% in query Generationszeit bei der Abwägung von einem leichten Anstieg der Code Ausführlichkeit.

    Docs sind hier: http://docs.sqlalchemy.org/ en / latest / ORM / extensions / baked.html

oder verwenden Sie einen Application-Level-Cache über schwache Referenzen dicts (weakref.WeakValueDictionary), ein Beispiel sehen Sie hier: http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject

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