[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