2010-03-26 3 views
8

Hat jemand SQLAlchemy und Memcached zusammengefügt, so dass Ergebnisse, die von SQLAlchemy zurückgegeben, wo in Memcached zwischengespeichert? Im Moment habe ich keine Ahnung, wie ich es selbst umsetzen soll, ich bin völlig verloren und suche Hilfe.Wie SQLAlchemy Memcached verwenden?

Danke, Boda Cydo.

Antwort

-4

Memcache und relationale Datenbanken sind zwei verschiedene Dinge, die nicht auf die gleiche Weise funktionieren. Memcache ist ein einfacher Nachschlage-Bucket, der zum Dumping von Blobs wie Teilwebseiten geeignet ist, die von vielen Anfragen gemeinsam genutzt werden und deren Erstellung lange dauert (wenn Sie Ihr Datenbankschema nicht ausreichend optimieren/denormalisieren können, um es schnell zu machen) produzieren).

Es ist keine gute Idee, Memcache wie einen vollständigen Backend-Datenspeicher zu verwenden, und es wäre nicht sinnvoll, eine SQL-Schnittstelle zu Memcache oder der Datenbank zu präsentieren: Sie würden das Schlimmste aus beiden Welten ohne entweder die Einfachheit/Geschwindigkeit von Memcache oder die ACID-Konformität einer relationalen Datenbank.

Ihr Datenbankserver verfügt bereits über einen Cache. Wenn Sie möchten, dass es mehr zwischenspeichert, sollten Sie die Größe dieses Cache so hoch wie möglich erhöhen, ohne auf die Hardware gehen zu müssen. Verwenden Sie Memcache, um das Front-End schneller zu machen - aber nur, wenn Sie wirklich nicht die gewünschte Leistung aus der Datenbank herausholen können, da Sie Kompromisse bei der Datenkonsistenz eingehen müssen. Gehen Sie nicht zu Memcache, bis Sie es wirklich brauchen.

+4

konnte nicht mehr widersprechen. Laden der Zeilen über das Netzwerk, Konvertieren in interne Strukturen, Rendern einer Seite. Alle teuren Prozesse, die nicht durch eine schnellere Datenbank verbessert werden können. Die meisten nicht-trivialen Webanwendungen, die zum Laden von Daten ein beliebiges entferntes System verwenden, sollten standardmäßig einen Cache wie Memcached verwenden. Es geht nicht nur darum, Resultsets zwischenzuspeichern, das ist nur ein Aspekt des Caching. – zzzeek

+3

Und sogar Ergebnis-Caching ist extrem relevant. Sie können einige wenige Abfragen haben, die notwendigerweise langsam sind (z. B. die Standardabweichung einiger Werte in einer gesamten großen Tabelle zusammenfassen) und nur einige Male pro Tag benötigt werden. Sie können versuchen, Ihre Datenbank auf massive Hardware für nur diese eine Abfrage zu skalieren, oder Sie können es kostenlos in einen Cache werfen. – zzzeek

+1

@zzzeek Sie sind genau richtig. Aussagen, die mit "Es ist keine gute Idee zu ..." beginnen, wären besser geschrieben als "In meiner endlichen - und daher begrenzten - Erfahrung ist es keine gute Idee zu ..." –

9

In der SQLAlchemy-Quelle finden Sie unter beaker caching example, wie Sie Caching in eine SQLAlchemy-Anwendung integrieren können. Becher kann Memcached als Cache-Speicher verwenden.

+0

Toter Link. In jedem Fall wurde Beaker offenbar durch dogpile.cache ersetzt: http://techspot.zzzeek.org/2012/04/19/using-beaker-for-caching-why-you-ll-want-to-switch- zu-dogpile.cache / –