2013-12-10 135 views
1

我試圖通過org.neo4j.rest.graphdb進行neo4j REST批處理工作,但我不知道該如何工作。我做的事:通過REST的Neo4j批處理請求

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

我明白,我可以寫我自己的休息請求,構造函數,但它不是合適的解決方案我需要什麼。也許有人曾與這個圖書館合作,並且知道正確的方法。問題是數據庫沒有任何更改,並且沒有出現錯誤。

更新:如果我用一個平常RestAPIFacade交易,並設置

System.setProperty( 「org.neo4j.rest.batch_transaction」, 「真」);

我得到過早的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個空節點)。那麼,有沒有辦法增加事務大小,或者我應該將數據部分劃分爲許多事務(因此性能顯然會受到影響)?

謝謝!

回答

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"); 
+0

我想這個交易,但沒有改變...'System.setProperty(「組織.neo4j.rest.batch_transaction「,」true「); \t \t GraphDatabaseService graphDb =新RestGraphDatabase( \t \t \t \t 「HTTP://本地主機:7474 /分貝/數據」); \t \t RestAPI rest =((RestGraphDatabase)graphDb).getRestAPI(); \t \t Transaction tx = graphDb.beginTx(); \t \t嘗試{ \t \t \t對(INT I = 0; I <1000;我++){ \t \t \t \t rest.createNode(空); \t \t \t} \t \t}最後{ \t \t \t tx.success(); \t \t}' – Natal