Ich versuche, eine große Menge von Daten von CSV zu Neo4j mit Neo4j-Rest Java-API zu importieren. out of memory Ausnahmen zu vermeiden, verwende ich regelmäßig zu begehen, so dass eine Probe Java-Code wäre:Wie Transaktion Rollback in Neo4j behandeln, während große Daten von CSV mit periodischen Commit laden
// just to let you know what classes I am using
import org.neo4j.rest.graphdb.query.CypherTransaction;
import org.neo4j.rest.graphdb.query.CypherTransaction.Statement;
import org.neo4j.rest.graphdb.query.CypherTransaction.Result;
import org.neo4j.rest.graphdb.query.CypherTransaction.ResultType;
private static final String CREATE_USER =
" USING PERIODIC COMMIT 10000 LOAD CSV WITH HEADERS FROM " +
"\"URL\" AS line WITH line\n" +
" CREATE (u:USER{id:toInt(line.customer_key)})";
//create USER Node
Statement userStatement = new Statement(CREATE_USER, null, ResultType.rest, false);
CypherTransaction periodicCommitTransaction = new CypherTransaction(dbPath, CypherTransaction.ResultType.rest);
periodicCommitTransaction.addAll(userStatement);
periodicCommitTransaction.commit();
Nun meine Frage ist, wie soll ich Transaktion Rollbacks in regelmäßigen Commits behandeln? Ich weiß, dass die periodischen Commit-Anweisungen nicht in einer offenen Transaktion ausgeführt werden können, und sie sollten direkt nach dem Senden der Anforderung festgeschrieben werden. Dies bedeutet, dass es keine Möglichkeit gibt, ein Rollback durchzuführen, wenn etwas schief geht. Ich denke, das ist ein häufiges Problem bei Batch-Einfügungen, also wie sollte ich mit solchen Rollbacks umgehen? Soll ich meine db in neo4j ablegen und versuchen, den ganzen Prozess von Anfang an zu starten? Irgendwelche Gedanken?
Verwendung einen Parameter für URL –
ja ich es in meinem echten Code verwenden :-) Ich kann es nur verändern es hier im Code zu setzen. Danke Michael. – Lina