2016-11-24 82 views
1

我正在使用Neo4j rest api創建一個具有更多節點和關係的圖結構。我使用以下密碼查詢格式在單個發佈請求中發送一批節點及其關係。通過Neo4j rest api發送的數據不會持久

UNWIND [[0,1], [0,6309]] AS pair 
MATCH (n {name: pair[0]}), (m {name: pair[1]}) 
CREATE (n)-[:X]->(m) 

我從1GB大小的文件中讀取數據,並上傳數據分批到Neo4j的。我發送的所有請求的響應碼爲200,但當我檢查{$NEO4J_HOME}/data/databases/graph.db大小時,它只顯示244K大小。 graph.db中的du -hc *store.db*命令顯示所有nodestore.db,relationshipstore.db和propertystore.db大小均爲0.爲什麼通過rest api上載的數據沒有寫入圖形DB中的文件?任何幫助將不勝感激。從du -hc *store.db*

0  neostore.nodestore.db 
4.0K neostore.nodestore.db.id 
8.0K neostore.nodestore.db.labels 
4.0K neostore.nodestore.db.labels.id 
0  neostore.propertystore.db 
8.0K neostore.propertystore.db.arrays 
4.0K neostore.propertystore.db.arrays.id 
4.0K neostore.propertystore.db.id 
8.0K neostore.propertystore.db.index 
4.0K neostore.propertystore.db.index.id 
8.0K neostore.propertystore.db.index.keys 
4.0K neostore.propertystore.db.index.keys.id 
0  neostore.relationshipstore.db 

輸出這是發送使用球衣客戶端的Neo4j REST API完整的請求。

Client client = Client.create(); 
client.addFilter(new HTTPBasicAuthFilter(user, password)); 
WebResource cypherResource = client.resource("http://localhost:7474/db/data/cypher"); 
ClientResponse cypherResponse = cypherResource.accept(MediaType.APPLICATION_JSON) 
      .type(MediaType.APPLICATION_JSON_TYPE).entity(query).post(ClientResponse.class); 

樣品查詢設置爲實體:

{"query":"UNWIND [[0,1], [0,6309]] AS pair 
MATCH (n {name: pair[0]}), (m {name: pair[1]}) CREATE (n)-[:X]->(m)"} 
+0

向我們展示發送給Neo4j的完整查詢(方法,路徑,標頭,正文)。也許你從不承諾交易? –

+0

我已經用發送給Neo4j的完整查詢更新了問題。謝謝你的幫助。 – sathya

回答

0

我被扯到了REST情況下,當實際的查詢將不會在任何情況下工作(REST API,Neo4j的瀏覽器,neo4j-外殼等)。

根據所有文件的大小,數據庫中沒有任何關係或節點。您的查詢從節點上匹配開始:因爲沒有任何,所以CREATE子句將永遠不會執行。

要創建不存在的節點,然後是關係,您需要使用MERGE而不是MATCH。你也應該設定一個標籤的節點上,而對於性能和正確性,對name屬性,用於標籤創建unicity constraint(將在同一時間創建索引):

CREATE CONSTRAINT ON (n:Node) ASSERT n.name IS UNIQUE; 

則:

UNWIND [[0,1], [0,6309]] AS pair 
MERGE (n:Node {name: pair[0]}) 
MERGE (m:Node {name: pair[1]}) 
CREATE (n)-[:X]->(m) 

(或者如果文件中可能存在重複對,則使用MERGE作爲關係)。

您是否知道LOAD CSV Cypher子句,它可以比您的遠程查詢更快地導入數據,即使手動批量配對也是如此?

+0

感謝您的解決方案。我嘗試了這種方法,它似乎正常工作。 neostore文件從我發送的數據中得到更新,並且我使用多個線程來批量併發地發佈數據。然而,對於1GB大小的數據集,它需要將近3個小時,並且仍然在上傳。 我知道'LOAD CSV'選項,但我必須使用其餘api來比較neo4j與其他圖形數據庫的流動圖表的性能。 – sathya