[Python] Python, redis e bottleneck

Pietro Battiston me a pietrobattiston.it
Dom 15 Dic 2013 13:50:15 CET


Salve a tutti,

dopo l'ultima discussione in cui sono stato invitato a verificare se ci
guadagnassi veramente qualcosa a mappare con oggetti le mie tabelle SQL,
mi sono reso conto... che l'SQL era semplicemente lo strumento sbagliato
per me. Ed ho scoperto redis.

L'unico mio problema con redis è che devo usare svariati database
diversi, che non stanno tutti in memoria. Però posso caricarli quando mi
servono, con redis-dump-load.¹

Qui veniamo alla domanda: per fare ciò, i database devono essere salvati
su disco in formato json (e qui l'efficienza è un problema secondario,
dato che lo faccio una volta sola) e ricaricati. Ricaricarli è
un'operazione che mi prende parecchio tempo (nel senso che devo anche
farla svariate volte). Ha certamente a che fare con il fatto che il mio
computer non è una scheggia (N.B: il bottleneck non è il disco), però
comunque mi stupisce che, su due core che ho, l'utilizzo (verificato con
un brutale "top") rimanga intorno al 80% di python + i 35% di redis. Non
ho altri processi impegnino il processore in maniera significativa
(tant'è che nella successiva fase di analisi dei dati, python è fisso al
100%).

Ho letto che redis può essere nettamente più efficiente se si usa un
socket unix invece che TCP-IP, ed in effetti provando ho notato un certo
incremento di prestazioni (con il TCP-IP, le cifre erano piuttosto 70%
di python + 30% di redis).

Sapete dirmi se potrei fare qualcosa di più? O se dovrei arrendermi?

grazie

Pietro

¹ : https://github.com/p/redis-dump-load/



Maggiori informazioni sulla lista Python