Ne SQLAlchemy charge la mise en cache?
Ne SQLAlchemy appui de une sorte de mise en cache, donc si j'ai exécuter plusieurs fois la même requête, il renvoie la réponse de cache au lieu de l'interrogation de la base de données? Est-ce cache automatiquement désactivée lorsque la base de données est mise à jour?
Ou ce qui est la meilleure façon de mettre cela sur un CherryPy + SQLAlchemy l'installation?
Vous devez vous connecter pour publier un commentaire.
Nous avons une assez complet de solution de mise en cache, comme un exemple en conjonction avec embedded crochets, à 0.6. C'est une recette à la sous-classe de Requête, de le rendre conscient de Bécher, et de permettre le contrôle de la requête de mise en cache pour les requêtes explicites ainsi que des paresseux chargeurs via les options de requête.
Je suis en cours d'exécution dans la production maintenant. L'exemple lui-même est dans la dist et l'intro de la documentation est à http://www.sqlalchemy.org/docs/orm/examples.html#beaker-caching .
Mise à JOUR: Bécher a maintenant été remplacé par
dogpile
la mise en cache: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_cachingPas de réponse à votre deuxième question, mais d'après les commentaires de ce lien indique que SQLAlchemy ne supporte pas le cacher : http://spyced.blogspot.com/2007/01/why-sqlalchemy-impresses-me.html
Raven dit...
Jonathan Ellis a dit...
SQLAlchemy prend en charge deux types de caches:
La mise en cache le résultat du jeu de sorte que l'exécution répétée de la même requête frappe le cache au lieu de la base de données. Il utilise
dogpile
qui prend en charge de nombreux différents backends, y comprismemcached
,redis
, et la base de fichiers plats.Docs sont ici: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching
Mise en cache de la
query
objet, de telle sorte que l'interpréteur Python n'a pas manuellement les ré-assembler la chaîne de requête à chaque fois. Ces requêtes sont appelésbaked queries
et le cache est appelébaked
. Fondamentalement, il met en cache toutes les actionssqlalchemy
prend AVANT de frapper la base de données--il ne s'agit pas de couper vers le bas sur les appels de base de données. Initiale benchmarks montrent la vitesse de jusqu'à 40% dansquery
temps de génération, à la différence d'une légère augmentation dans le code de verbosité.Docs sont ici: http://docs.sqlalchemy.org/en/latest/orm/extensions/baked.html
Ou l'utilisation d'une application-niveau de cache par l'intermédiaire de faibles références dicts (weakref.WeakValueDictionary), voir un exemple ici : http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject