[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