2013-03-12 5 views
5

War ein paar Tests.Insert-Leistung mit und ohne Index

Basierend auf einigen großartigen Vorschlägen von Wes etc., habe ich einige der Eigenschaften von neo4j ohne Cache eingestellt, um in einer Multithread-Umgebung in großem Umfang einfügen und die Leistung ist nicht schlecht.

Allerdings, wenn ich Index (auf den Knoten) einführen, verschlechtert sich die Leistung sehr. Der Unterschied ist leicht 5-fach. Gibt es Konfigurationseinstellungen, um es besser zu machen?

Vielen Dank im Voraus,

Sachin

Neo4j Version - 1.8.1; JVM - 1.6

Antwort

4

Das Einfügen von Knoten (oder Beziehungen) in einen Lucene-Index ist kostspielig. Lucene ist ein leistungsstarkes, aber komplexes Tool, das für die Volltextsuche/Stichwortsuche entwickelt wurde. Verglichen mit der bloßen Datenbank ist es eher langsam. Diese

ist, warum die meisten Masseneinsatz Werkzeuge, um die Indizierung asynchron tun, wie Michaels Batch-Inserter:

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

einige sogar circumvent Transaktionen oder die Speicherung von Dateien schreiben direkt:

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

Um die Leistung zu verbessern, könnte die Verwendung einer SSD-Festplatte hilfreich sein. Aber da Neo4j eine vollständige ACID-Transaktionsdatenbank ist und der Lucene-Index eng mit den Transaktionen gekoppelt ist (was eine gute Sache ist), können Sie nicht viel mehr tun, als Ihre Infrastruktur für beste Schreibleistung zu optimieren.

+1

+1 für gute Empfehlungen. Ich arbeite an einem Programm, um die Files direkt in C zu schreiben. Es wird rocken. Aber ich plane nicht, Indexe anfänglich (oder vielleicht überhaupt) zu unterstützen - habe noch nicht einmal das Lucene-Dateiformat angeschaut. Das OP könnte in Erwägung ziehen, die Indizes nach den Knoten in ihren eigenen Massentransaktionen zu schreiben. –

+0

Wow, klingt interessant. Das Rennen um die Top-Neo4j-Insert-Performance ist eröffnet! :) –

+0

Bisher 1B Knoten in 82 Sekunden (keine Eigenschaften oder rels, nutzlos!). Fast schon wieder arbeiten - es braucht einiges an Arbeit, um Rels zu machen. –

0

Nur falls diese zusätzliche Antwort noch der Einsatz für jedermann läuft Neo4j auf einem ext4-Dateisystem unter Linux:

einige Transaktionssicherheit (vernachlässigbar auf USV/Batterie-gepufferte Systeme oder Laptops) Durch den Handel, die Schreibleistung kann um einen Faktor von 10-15 erhöht werden!

Lesen Sie mehr in dieser letzten Blog-Post: http://structr.org/blog/neo4j-performance-on-ext4