Neo4j Embedded Java-事务被标记为成功,但无法提交事务,因此回滚

Neo4j Embedded Java-事务被标记为成功,但无法提交事务,因此回滚,java,netbeans,neo4j,transactions,Java,Netbeans,Neo4j,Transactions,我正在尝试在Neo4j的图形中加载16807个节点,其中包含17.210.368个关系。为此,我加载了一个包含vincinity表的文件,得到了一个包含必须通过关系连接的节点的列表 请在下面找到我的代码: String inputFile = "Desktop\kron7cd_unix.t01"; FileInputStream in = new FileInputStream(inputFile); FileChannel ch = in.getChannel();

我正在尝试在Neo4j的图形中加载16807个节点,其中包含17.210.368个关系。为此,我加载了一个包含vincinity表的文件,得到了一个包含必须通过关系连接的节点的列表

请在下面找到我的代码:

    String inputFile = "Desktop\kron7cd_unix.t01";
    FileInputStream in = new FileInputStream(inputFile);
    FileChannel ch = in.getChannel();
    ByteBuffer buf = ByteBuffer.allocate(1024);

    ArrayList<Integer> list = new ArrayList<Integer>();
    int NumOfOnes = 0;
    int column=-1;
    int row=0;
    int rd;
    while ((rd = ch.read( buf )) != -1){
        buf.flip();
        while (buf.hasRemaining()){
            byte byteVal = buf.get();
            if((byteVal == 48) || (byteVal == 49)){// when finds 1 or 0
                column++;
            }
            if (byteVal == 92){//when finds '/'
                    row++;
                    column=-1;
            }
            if(byteVal == 49){//when finds 1
                NumOfOnes++;
                list.add(column);
                list.add(row);
            }
        }
    buf.clear();
    }
    ch.close();


    GraphDatabaseFactory dbFactory = new GraphDatabaseFactory();
    GraphDatabaseService graphDb = dbFactory.newEmbeddedDatabase("C:\Neo4j\default.graphdb");

    Transaction tx = graphDb.beginTx();
    try {

        Label myLabel = DynamicLabel.label("Data");
        ArrayList<Node> nodelist = new ArrayList<Node>();

        for (int k = 0; k < row; k++) {
            nodelist.add(graphDb.createNode());
        }

        for (int k = 0; k < row; k++) {
            nodelist.get(k).setProperty("ID", k);
            nodelist.get(k).setProperty("Group","Random");
            nodelist.get(k).addLabel(myLabel);
        }

        Relationship rel;
        final RelationshipType type2 = DynamicRelationshipType.withName("Rel");

        for (int j = 0; j < list.size()-1 ; j += 2) { //list.size()=34420736

            rel = nodelist.get(list.get(j)).createRelationshipTo(nodelist.get(list.get(j+1)), type2);
            rel.setProperty("Team", "Common");

            if (j > 0 && j % 10000 == 0) {// as to commit transaction every now and then and dont throw heap space
                tx.success();
                tx.close();
                tx = graphDb.beginTx();
            }                

        }

        tx.success();
    }

    finally {
        tx.close();
    }
    graphDb.shutdown();
String inputFile=“Desktop\kron7cd\u unix.t01”;
FileInputStream in=新的FileInputStream(inputFile);
FileChannel ch=in.getChannel();
ByteBuffer buf=ByteBuffer.allocate(1024);
ArrayList=新建ArrayList();
int NumOfOnes=0;
int列=-1;
int行=0;
国际公路;
而((rd=ch.read(buf))!=-1){
buf.flip();
while(buf.haslaining()){
byte byteVal=buf.get();
如果((字节值==48)| |(字节值==49)){//when查找1或0
列++;
}
如果(byteVal==92){//when找到'/'
行++;
列=-1;
}
如果(byteVal==49){//when找到1
NumOfOnes++;
列表。添加(列);
列表。添加(行);
}
}
buf.clear();
}
ch.close();
GraphDatabaseFactory dbFactory=新GraphDatabaseFactory();
GraphDatabaseService graphDb=dbFactory.newEmbeddedDatabase(“C:\Neo4j\default.graphDb”);
事务tx=graphDb.beginTx();
试一试{
Label myLabel=DynamicLabel.Label(“数据”);
ArrayList nodelist=新的ArrayList();
对于(int k=0;k0&&j%10000==0){//,则偶尔提交事务,并且不抛出堆空间
成功();
tx.close();
tx=graphDb.beginTx();
}                
}
成功();
}
最后{
tx.close();
}
graphDb.shutdown();
当我运行这段代码时,它会抛出以下错误。我将Neo4j 2.3.3和Netbeans 8.1与Java8一起使用我想知道问题是堆空间还是它试图提交事务的时间。我还在项目中添加了命令行选项-Xmx1g,以增加堆空间

有什么想法吗

在下面查找错误消息:

Exception in thread "main" org.neo4j.graphdb.TransactionFailureException: Transaction was marked as successful, but unable to commit transaction so rolled back.
at org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:121)
at com.mycompany.traverse_test.traverse_main.main(traverse_main.java:232)

Caused by: org.neo4j.kernel.api.exceptions.TransactionFailureException: Could not apply the transaction to the store after written to log
at org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.applyToStore(TransactionRepresentationCommitProcess.java:105)
at org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.commit(TransactionRepresentationCommitProcess.java:58)
at org.neo4j.kernel.impl.api.KernelTransactionImplementation.commit(KernelTransactionImplementation.java:565)
at org.neo4j.kernel.impl.api.KernelTransactionImplementation.close(KernelTransactionImplementation.java:458)
at org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:97)
... 1 more

Caused by: java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method)
at org.neo4j.unsafe.impl.internal.dragons.UnsafeUtil.allocateMemory(UnsafeUtil.java:386)
at org.neo4j.unsafe.impl.internal.dragons.MemoryManager$Slab.<init>(MemoryManager.java:111)
at org.neo4j.unsafe.impl.internal.dragons.MemoryManager.allocateAligned(MemoryManager.java:82)
at org.neo4j.io.pagecache.impl.muninn.MuninnPage.initBuffer(MuninnPage.java:417)
at org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.pageFault(MuninnPageCursor.java:230)
at org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.pin(MuninnPageCursor.java:157)
at org.neo4j.io.pagecache.impl.muninn.MuninnWritePageCursor.next(MuninnWritePageCursor.java:58)
at org.neo4j.kernel.impl.store.PropertyStore.updateRecord(PropertyStore.java:144)
at org.neo4j.kernel.impl.transaction.command.NeoStoreTransactionApplier.visitPropertyCommand(NeoStoreTransactionApplier.java:99)
at org.neo4j.kernel.impl.api.CommandApplierFacade.visitPropertyCommand(CommandApplierFacade.java:120)
at org.neo4j.kernel.impl.transaction.command.Command$PropertyCommand.handle(Command.java:288)
at org.neo4j.kernel.impl.api.CommandApplierFacade.visit(CommandApplierFacade.java:82)
at org.neo4j.kernel.impl.api.CommandApplierFacade.visit(CommandApplierFacade.java:45)
at org.neo4j.kernel.impl.transaction.log.PhysicalTransactionRepresentation.accept(PhysicalTransactionRepresentation.java:69)
at org.neo4j.kernel.impl.api.TransactionRepresentationStoreApplier.apply(TransactionRepresentationStoreApplier.java:111)
at org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.applyToStore(TransactionRepresentationCommitProcess.java:100)
... 5 more
线程“main”org.neo4j.graphdb.TransactionFailureException中的异常:事务被标记为成功,但无法提交因此回滚的事务。
在org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:121)上
在com.mycompany.traverse\u test.traverse\u main.main(traverse\u main.java:232)
原因:org.neo4j.kernel.api.exceptions.TransactionFailureException:写入日志后无法将事务应用于存储
位于org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.applyToStore(TransactionRepresentationCommitProcess.java:105)
位于org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.commit(TransactionRepresentationCommitProcess.java:58)
位于org.neo4j.kernel.impl.api.KernelTransactionImplementation.commit(KernelTransactionImplementation.java:565)
位于org.neo4j.kernel.impl.api.KernelTransactionImplementation.close(KernelTransactionImplementation.java:458)
位于org.neo4j.kernel.TopLevelTransaction.close(TopLevelTransaction.java:97)
... 还有一个
原因:java.lang.OutOfMemoryError
在sun.misc.Unsafe.allocateMemory(本机方法)
位于org.neo4j.unsafe.impl.internal.dragons.UnsafeUtil.allocateMemory(UnsafeUtil.java:386)
位于org.neo4j.unsafe.impl.internal.dragons.MemoryManager$Slab(MemoryManager.java:111)
位于org.neo4j.unsafe.impl.internal.dragons.MemoryManager.allocateAligned(MemoryManager.java:82)
位于org.neo4j.io.pagecache.impl.muninn.MuninnPage.initBuffer(MuninnPage.java:417)
位于org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.pageFault(MuninnPageCursor.java:230)
位于org.neo4j.io.pagecache.impl.muninn.MuninnPageCursor.pin(MuninnPageCursor.java:157)
位于org.neo4j.io.pagecache.impl.muninn.MuninnWritePageCursor.next(MuninnWritePageCursor.java:58)
位于org.neo4j.kernel.impl.store.PropertyStore.updateRecord(PropertyStore.java:144)
位于org.neo4j.kernel.impl.transaction.command.neostoretransactionapplicater.visitPropertyCommand(neostoretransactionapplicater.java:99)
位于org.neo4j.kernel.impl.api.CommandApplierFacade.visitPropertyCommand(CommandApplierFacade.java:120)
位于org.neo4j.kernel.impl.transaction.command.command$PropertyCommand.handle(command.java:288)
访问org.neo4j.kernel.impl.api.CommandApplierFacade.visit(CommandApplierFacade.java:82)
访问org.neo4j.kernel.impl.api.CommandApplierFacade.visit(CommandApplierFacade.java:45)
位于org.neo4j.kernel.impl.transaction.log.PhysicalTransactionRepresentation.accept(PhysicalTransactionRepresentation.java:69)
位于org.neo4j.kernel.impl.api.TransactionRepresentationStoreApplier.apply(TransactionRepresentationStoreApplier.java:111)
位于org.neo4j.kernel.impl.api.TransactionRepresentationCommitProcess.applyToStore(TransactionRepresentationCommitProcess.java:100)
... 还有5个

您应该每1k-10k个元素提交一次事务,以避免在堆上保存所有数据。例如,请参阅,

,当我在另一个系统中尝试运行相同的代码时,我知道问题在于堆空间错误。我在3GB内存的系统中运行代码,它会弹出上面的错误,但我在12GB内存的系统中运行代码,它正常运行。(我想是w