2016-04-08 12 views
1

Ich Neo4j die BatchInserter mit in einer großen Kurve, die eine unterschiedliche Anzahl von Beziehungen einzufügen (500 Millionen + Nodes)Neo4j BatchInserter langsam Abschaltung

Es ist außergewöhnlich schnell, viele 1000 von Beziehungen pro Minute eingeführt wird.

Aber die Abschaltung ist sehr langsam, dauert über eine Stunde, auch wenn nur eine kleine Anzahl von Beziehungen eingefügt wurden.

innerhalb org.neo4j.unsafe.batchinsert.BatchInserterImpl.shutdown() Sehen, ich sehe, dass es eine Reihe von Operationen, die es macht, einschließlich repopulateAllIndexes()

Ich weiß nicht, welcher Teil der Abschaltung so lange dauert, aber wenn ich weiß für eine Tatsache, dass Die neuen Beziehungen beeinflussen keine Indizes. Lohnt es sich, die Unterklasse BatchInserterImpl abzuleiten und einige dieser Abschaltvorgänge zu überspringen?

+1

In dieser Phase wird auch sehr viel gespült. Ich schlage vor, Sie fügen einen Profiler an den Prozess (z. B. YourKit) und sehen, wo die Zeit tatsächlich verbracht wird. –

Antwort

0

Richtig, der BatchInserter durchläuft keine großen Anstrengungen, um den Shutdown-Prozess zu optimieren, da nur betroffene Indizes neu erstellt werden. Es gibt einen booleschen Befehl, der dies steuert und es ist einfach, ob irgendwelche Beschriftungen auf irgendeinem Knoten geändert wurden oder nicht. Wenn dies der Fall ist, wird eine vollständige Neuerstellung der Indizes (bei einem Speicher-Scan) ausgelöst. Dies kann wahrscheinlich verbessert werden, wie Sie erwähnen.