Neo4j通过REST批处理请求

时间:2013-12-10 03:00:33

标签: java rest neo4j batch-processing

我尝试通过org.neo4j.rest.graphdb进行neo4j REST批处理工作,但我不知道它应该如何工作。我做的事情:

final RestAPIFacade rest = new RestAPIFacade("http://localhost:7474/db/data");
BatchTransaction tx = BatchTransaction.begin(rest);
BatchRestAPI newrest = new BatchRestAPI("http://localhost:7474/db/data",rest);

try {
    for (int i = 0; i < 1000; i++) {
        newrest.createNode(null);
    }
    tx.success();
} finally {
    tx.finish();
}

我知道我可以编写自己的rest请求构造函数,但它不适合我需要的解决方案。也许有人与这个图书馆合作并且知道正确的方法。问题是数据库没有任何变化,也没有出现错误。

更新:如果我使用通常的RestAPIFacade事务并设置

  

System.setProperty(“org.neo4j.rest.batch_transaction”,“true”);

我得到过早的EOF错误。

Caused by: java.io.IOException: Premature EOF
    at sun.net.www.http.ChunkedInputStream.readAheadBlocking(ChunkedInputStream.java:565)
    at sun.net.www.http.ChunkedInputStream.readAhead(ChunkedInputStream.java:609)
    at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:696)
    at java.io.FilterInputStream.read(FilterInputStream.java:133)

因此,一个事务似乎限于某种规模(近700个空节点)。那么,有没有办法增加交易规模,或者我应该在许多交易中划分我的数据部分(所以性能显然会受到影响)?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试更改代码以构建RestGraphDatabase实例,然后从中获取事务,而不是自己构建它们。如果您想使用它,RestAPI也是如此。像

这样的东西
GraphDatabaseService graphDb = new RestGraphDatabase("http://localhost:7474/db/data");
...
Transaction tx = graphDb.beginTx();
...
RestAPI restApi = graphDb.getRestAPI();

如果您希望批量执行交易,您还应该设置相应的系统属性

System.setProperty("org.neo4j.rest.batch_transaction", "true");