2010-03-26 19 views
8

Qualcuno si è unito a SQLAlchemy e Memcached insieme in modo che i risultati restituiti da SQLAlchemy siano stati memorizzati nella cache in Memcached? Al momento non ho idea di come implementarlo da solo, sono completamente perso e in cerca di aiuto.Come rendere SQLAlchemy utilizzare Memcached?

Grazie, Boda Cydo.

risposta

-4

Memcache e database relazionali sono due cose separate, che non funzionano affatto allo stesso modo. Memcache è un semplice bucket di ricerca, utile per il dumping di blob come le pagine web parziali che sono condivise tra molte richieste e impiegano molto tempo per produrle (per quando non è possibile ottimizzare/denormalizzare lo schema del database abbastanza da renderle rapide a produrre).

Non è una buona idea utilizzare memcache come un archivio dati completo di back-end e non sarebbe utile presentare un'interfaccia SQL destinata a memcache o al database: si otterrebbe il peggiore dei due mondi, senza la semplicità/velocità di memcache o la conformità ACID di un database relazionale.

Il server di database ha già una cache. Se si desidera che memorizzi di più nella cache, aumentare la dimensione di tale cache il più in alto possibile senza dover passare a hardware stupido. Usa memcache per rendere il front-end più veloce, ma solo quando non riesci davvero a ottenere le prestazioni che desideri dal database, perché richiede di scendere a compromessi sulla coerenza dei dati. Non ricorrere a memcache finché non ne hai davvero bisogno.

+4

non potrebbe essere più in disaccordo. caricamento delle righe sulla rete, conversione in strutture interne, rendering di una pagina. Tutti i processi costosi che non possono essere migliorati da un database più veloce. La maggior parte delle applicazioni Web non banali che utilizzano qualsiasi tipo di sistema remoto per caricare i dati dovrebbero assumere l'utilizzo di una cache come Memcached per impostazione predefinita. Non si tratta solo di memorizzare i set di risultati, è solo un aspetto della memorizzazione nella cache. – zzzeek

+3

E persino il set cache dei risultati è estremamente rilevante. Potresti avere alcune query che sono necessariamente lente (ad esempio, aggregando la deviazione standard di alcuni valori su un'intera grande tabella) e sono necessarie solo poche volte al giorno. Puoi provare a ridimensionare il tuo database su hardware di massa solo per questa query, oppure puoi buttarlo in una cache gratuitamente. – zzzeek

+1

@zzzeek Sei perfetto. Dichiarazioni che iniziano con "Non è una buona idea per ..." sarebbe meglio scrivere come "Nel mio finito - e quindi limitato - esperienza, non è una buona idea ..." –

9

Vedere lo beaker caching example nell'origine SQLAlchemy per vedere come è possibile integrare la memorizzazione nella cache in un'applicazione SQLAlchemy. Beaker può usare Memcached come archivio cache.

+0

Collegamento guasto. In ogni caso, Beaker è stato apparentemente sostituito da dogpile.cache: http://techspot.zzzeek.org/2012/04/19/using-beaker-for-caching-why-you-ll-want-to-switch- to-dogpile.cache / –