2013-03-12 12 views
5

Stava facendo un paio di test.Inserimento delle prestazioni con e senza indice

Sulla base di alcuni ottimi suggerimenti di Wes, ecc., Ho ottimizzato alcune delle proprietà neo4j senza cache per fare inserimenti su larga scala in un ambiente con multithreading e le prestazioni non sono male.

Tuttavia, quando introduco l'indice (sui nodi), le prestazioni si riducono notevolmente. La differenza è facilmente 5 volte. Ci sono impostazioni di configurazione per renderlo migliore?

Grazie in anticipo,

Sachin

Neo4j versione - 1.8.1; JVM - 1.6

risposta

4

L'inserimento di nodi (o relazioni) in un indice di Lucene è costoso. Lucene è uno strumento potente ma complesso, progettato per la ricerca di testo completo/parola chiave. Rispetto al semplice database, è piuttosto lento.

Questo è il motivo per la maggior parte degli strumenti di inserimento di massa fanno l'indicizzazione in modo asincrono, come il lotto di inserimento di Michael:

http://jexp.de/blog/2012/10/parallel-batch-inserter-with-neo4j/

Alcune transazioni anche aggirare, o scrivere i file di archivio direttamente:

http://blog.xebia.com/2012/11/13/combining-neo4j-and-hadoop-part-i/

Per migliorare le prestazioni, l'utilizzo di un disco SSD può essere d'aiuto. Ma poiché Neo4j è un database transazionale completamente ACID e l'indice Lucene è strettamente associato alle transazioni (che è una buona cosa), non c'è molto altro che si possa fare oltre a ottimizzare l'infrastruttura per ottenere le migliori prestazioni di scrittura.

+1

+1 per buone raccomandazioni. Sto lavorando a un programma per scrivere i file del negozio direttamente in C. Sta per fare rock. Ma non ho intenzione di supportare gli indici inizialmente (o forse mai) - non ho ancora guardato il formato di file lucene ancora. L'OP potrebbe prendere in considerazione la possibilità di scrivere gli indici dopo i nodi, nelle proprie transazioni di massa. –

+0

Wow, sembra interessante. La corsa per le migliori prestazioni degli inserti Neo4j è attiva! :) –

+0

Finora, 1B nodi in 82 secondi (nessuna proprietà o rel, inutile!). Quasi i relano funzionano, ci vuole un po 'più di lavoro da fare. –

0

Solo nel caso questa risposta aggiuntiva è ancora d'uso per chi esegue Neo4j su un file system ext4 sotto Linux:

Commerciando qualche sicurezza delle transazioni (trascurabile sulla/Sistemi di USV batteria tampone o laptop), le prestazioni di scrittura può essere aumentato di un fattore di 10-15!

Per saperne di più in questo recente post sul blog: http://structr.org/blog/neo4j-performance-on-ext4

Problemi correlati