我试图通过Maven Java应用程序在Neo4j中创建一些节点,并在这些节点之间创建关系。确切地说,我想创建16807节点和17210368关系。我读了一个文件,并得到row
变量,它具有我必须创建的节点数,并且我还有一个list
,其中包含34420736个元素(= 17210368 * 2)。我想创建一个从节点[列表元素0]到节点[元素1从列表],从节点[列表的元素2]到节点[列表元素3]等的关系。列表的最大元素也是16807。我创建了一个ArrayList<Node>
来动态创建节点,因为我希望程序以不同的文件(以及不同的行值)运行。Neo4j - 无法回滚事务以创建与java的关系
这里是我的代码:
GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
GraphDatabaseService graphDb = dbFactory.newEmbeddedDatabase("C:\Users\....\default.graphdb");
Transaction tx = graphDb.beginTx();
try {
final RelationshipType type2 = DynamicRelationshipType.withName("KNOW");
ArrayList<Node> nodelist = new ArrayList<Node>();
for (int k = 0; k < row; k++) { //row=16807
nodelist.add(graphDb.createNode());
nodelist.get(k).setProperty("Name", "ListNode " + k);
}
int count=0;
for (int j = 0; j < list.size() ; j++) { //list.size()=34420736
nodelist.get(list.get(count)).createRelationshipTo(nodelist.get(list.get(count+1)), type2);
count=count+2;
}
tx.success();
}
finally {
tx.close();
}
graphDb.shutdown();
如果我不尝试创建关系它创建的节点和正确运行运行代码。当我添加的for循环创建realtionships它抛出我下面的错误:
Exception in thread "main" org.neo4j.graphdb.TransactionFailureException: Unable to rollback transaction
at org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:131)
at com.mycompany.traverse_test.traverse_main.main(traverse_main.java:138)
Caused by: java.lang.IllegalStateException: No RelationshipState for added relationship!
at org.neo4j.kernel.api.txstate.RelationshipChangeVisitorAdapter$1.visit(RelationshipChangeVisitorAdapter.java:132)
at org.neo4j.kernel.api.txstate.RelationshipChangeVisitorAdapter.visitAddedRelationship(RelationshipChangeVisitorAdapter.java:83)
at org.neo4j.kernel.api.txstate.RelationshipChangeVisitorAdapter.visitAdded(RelationshipChangeVisitorAdapter.java:106)
at org.neo4j.kernel.api.txstate.RelationshipChangeVisitorAdapter.visitAdded(RelationshipChangeVisitorAdapter.java:47)
at org.neo4j.kernel.impl.util.diffsets.DiffSets.accept(DiffSets.java:76)
at org.neo4j.kernel.impl.api.state.TxState.accept(TxState.java:156)
at org.neo4j.kernel.impl.api.KernelTransactionImplementation.rollback(KernelTransactionImplementation.java:542)
at org.neo4j.kernel.impl.api.KernelTransactionImplementation.close(KernelTransactionImplementation.java:404)
at org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:112)
... 1 more
任何想法?
你应该批量更新/数据创建在100k到500k的记录大小。否则,中间交易状态将会比你的堆大并且炸毁。 –
尝试捕获异常并记录它们,然后您会看到您获得了NPE或索引超出界限。通过你的finally块Neo4j试图完成tx,它处于只能回滚的状态。请回报抛出的异常。 –
你使用哪个Neo4j版本? –