On Mon, 12 Dec 2011 18:49:38 +0100, Alessandro Dentella wrote:
On Fri, Dec 02, 2011 at 03:37:34PM +0000, Daniele Varrazzo wrote:
Ah, cherrypy è multithread, ma lo storage su file delle sessioni non
è thread safe, me lo sono dovuto scrivere io. Mi chiedevo come mai
l'autore originale del programma usasse memcached solo per salvare
(si fa per dire le sessioni). Quando abbiamo fatto il multi-nodo, un
mio collega ha visto lo storage delle sessioni su database (che
potrebbe servirci se volessimo scalare su diverse macchine) e ha
detto che anche quello è finto.
Nel cammino verso l'indipendenza dell'applicativo dal processo voglio
portare le sessioni su database.
Uhm... ok... su file non vanno più bene? Assumo che lo vogliate fare
per scalare oltre la singola macchina, altrimenti non c'è ragione.
Considerando che attualmente le singole request vengono evase in 100
ms
circa, pensavo di farlo utilizzando SELECT FOR UPDATE, così da
garantirmi
che nessun'altra request possa leggere finché non ho evaso la
request.
E perché vorresti impedire di leggere? Uno fa tanto per progettare un
database che consenta letture e scritture concorrenti e tu infili gli un
ombrello nella ruota davanti? :)
Ci sono idee migliori o controindicazioni? (a parte che tengo
occupata una
connessione solo per questa transazione)
Controindicazioni dei lock espliciti? Quante ne vuoi. Non è una buona
idea. Sono pochi i problemi che hanno davvero bisogno di un lock per
essere risolti, e tu non sei neanche sicuro di avere un problema: ti
direi lascia perdere che rischi di fare più danni di quelli di cui hai
bisogno.
Guadando il codice di django non ci leggo precauzioni contro questa
eventualità, mi sfuggono o cherry-py non è solo?
Forse semplicemente non è un problema. Se hai un burst di letture sullo
stesso utente dovuto a richieste asincrone, dovrebbero leggere tutte uno
stato consistente della sessione. I problemi di cherrypy sono
ridicolamente altri, secondo me django due o tre persone l'hanno testato
e va bene così com'è. Con cherrypy a volte le sessioni leggevano un file
e lo trovavano vuoto perché la richiesta di prima l'aveva aperto per
scrivere (con open(name, 'w')) e non l'aveva ancora chiuso; con postgres
questo problema non esiste: o il vecchio, o il nuovo, ma un record
consistente ce lo trovi. Le sessioni su postgres di cherrypy erano finte
perché mancavano dei metodi che servivano, proprio pezzi non scritti e
oggetti mai usati, non avevano problemi di concorrenza. Di esistenza,
casomai.
A proposito, poi com'è andata con la storia di tornado e psycopg?
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python