Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Neo4j中处理事务回滚,同时使用定期提交从csv加载大数据_Neo4j_Cypher_Load Csv - Fatal编程技术网

如何在Neo4j中处理事务回滚,同时使用定期提交从csv加载大数据

如何在Neo4j中处理事务回滚,同时使用定期提交从csv加载大数据,neo4j,cypher,load-csv,Neo4j,Cypher,Load Csv,我正在尝试使用Neo4JRESTJavaAPI将大量数据从csv导入neo4j。为了避免内存不足异常,我使用定期提交,因此示例java代码如下: // 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;

我正在尝试使用Neo4JRESTJavaAPI将大量数据从csv导入neo4j。为了避免内存不足异常,我使用定期提交,因此示例java代码如下:

// 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();

现在我的问题是,我应该如何处理定期提交中的事务回滚?我知道定期提交语句不能在开放事务中运行,它们应该在请求发送后立即提交。这意味着,如果出现问题,就无法回滚。我想这是批插入中的一个常见问题,所以我应该如何处理这种回滚?我是否应该将db放在neo4j中,并尝试从头开始整个过程?有什么想法吗?

正确,定期提交默认情况下每x行提交一次

您唯一能做的就是使用特定标签标记“正在运行”的节点,如
:Importing
,如果导入成功,则删除该标签;如果导入失败,则删除所有节点及其关系。 但你必须批量处理

MATCH  (n:Importing) 
WITH n LIMIT 10000 
DETACH DELETE n 
RETURN count(*);

为url使用参数是的,我在我的真实代码中使用它:-)我刚刚更改了它,将其放在代码中。谢谢迈克尔,谢谢迈克尔,我得放下一切!在这种情况下,我想,我真的不需要用任何标签来标记它们。我仍然在使用neo 2.2.5,所以DETACH在这里还不起作用。将使用:MATCH n WITH n LIMIT 10000可选MATCH n-[r]()删除n,r再问一个问题。{n LIMIT 10000}-->这是否可以作为批处理工作?我的意思是,如果我有1000000个节点,那么这将执行100次?