[Python] Python, redis e bottleneck

Pietro Battiston me a pietrobattiston.it
Lun 16 Dic 2013 13:22:48 CET


Il giorno dom, 15/12/2013 alle 22.24 +0000, A. Cavallo ha scritto:
> Dipende tutto dalla mole di dati. Sopra 1T? Fino a diciamo 500Gb la
> soluzione più semplice è un disco sdd pcie, oramai costano sotto i
> 1000euri e puoi usare un DB tradizionale. 
> Redis è adatto in certi scenari ma non rimpiazza un DB (può in sempre
> usare un DB relazionale come nosql).
> 

?!

Nel mio scenario, se dovessi (costretto con le spalle al muro)
sostituire Redis lo sostituirei con un dizionario Python, che potrebbe
aumentare un po' l'efficienza, a costo però di costringermi a legare i
dati ad un processo specifico. Quindi se vuoi sono i dump di Redis che
rimpiazzano veramente un database per me. E in questa situazione se
volessi investire in hardware, comprerei più RAM (dato che gli SSD sono
almeno un ordine di grandezza più lenti).

(per la cronaca: se ci fosse un modo più pratico/rodato/efficiente per
fare il dump e ricaricare dei singoli database json sarei
interessatissimo - ma non ho trovato niente, e non ho voglia di
scrivermi codice ad hoc)

Vorrei solo capire dov'è il bottleneck, dato che né CPU né disco (né
RAM) sono utilizzati al massimo. Ma è una curiosità intellettuale (dato
che comunque la CPU è utilizzata all'80%, quindi il guadagno pratico da
un'eventuale illuminazione sarebbe limitato).

ciao

Pietro




> Pietro Battiston <me a pietrobattiston.it> wrote:
>         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/
>         
>         
>         ______________________________________________________________
>         
>         Python mailing list
>         Python a lists.python.it
>         http://lists.python.it/mailman/listinfo/python
> 
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python




Maggiori informazioni sulla lista Python