[Python] Python, redis e bottleneck

Pietro Battiston me a pietrobattiston.it
Mer 18 Dic 2013 10:14:05 CET


Il giorno mer, 18/12/2013 alle 00.20 +0100, Enrico Bianchi ha scritto:
> On 12/17/2013 04:37 PM, Pietro Battiston wrote:
> 
> >   Ad
> > esempio un set di dati che utilizzo è la descrizione di una rete. Quindi
> > la struttura base è un semplice dizionario
> >
> > { "elemento1" : ["elemento53", "elemento114", "elemento54"],
> >    "elemento2" : ["elemento1", "elemento32"],
> > ... }
> >
> > Io ho bisogno di rispondere in modo più veloce possibile alla domanda "a
> > chi è collegato elementox?".
> In teoria ti stavo rispondendo con un "Usa MongoDB" elencando le 
> motivazioni per cui tale scelta sarebbe stata conveniente per il tuo 
> caso. Poi pero`, leggendo meglio, mi sono soffermato meglio sull'esempio 
> che hai riportato. Da quello che ho notato praticamente definisci una 
> relazione di tipo gerarchico tra gli elementi, ovvero sei in uno 
> scenario completamente gestito da un database a grafi (tanto che 
> l'esempio della descrizione di una rete e` tipico per questi database). 
> Con queste premesse, la scelta piu` corretta e` Neo4j o OrientDB, con 
> preferenza per il primo soprattutto per un mero discorso di diffusione 
> (OrientDB e` piu` "malleabile" in quanto permette una gestione sia a 
> grafi che a documenti che a oggetti)
> 

Sì scusa, nell'ambito delle scienze sociali abbiamo il viziaccio di
chiamare "rete" ciò che in effetti si è sempre chiamato "grafo"...
Trovo molto interessanti i due db che mi hai suggerito, dato che mi
ricapiterà di sicuro di lavorare con grossi grafi. Ma nel caso specifico
per usarli in RAM dovrei di nuovo usare tmpfs? E finché non ho bisogno
di algoritmi di graph traversal (diciamo con path > 1), come efficienza
sono analoghi a Redis?

Riguardo al salvare/ricaricare database, forse l'errore che ho fatto fin
dall'inizio è stato di non utilizzare semplicemente istanze diverse del
server per database diversi (e vale per Redis, immagino, come per Neo4j
e OrientDB).


> > Se poi riuscissi a capire, a prescindere da tutto ciò, perché
> > l'operazione di riempire un database Redis da un dump json non utilizzi
> > al 100% né CPU né disco né RAM, la mia curiosità sarebbe soddisfatta.
> Presumo che l'I/O non ci stia dietro, quindi le latenze sono alte (parlo 
> ad occhio, non ho il sistema sotto mano ed e` impossibile capire con le 
> informazioni che dai)

D'accordo. Scusa la domanda forse stupida, ma così "a occhio" l'I/O a
cui stai pensando è quello tra CPU e RAM, giusto?

Pietro



Maggiori informazioni sulla lista Python