[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