2016-11-24 24 views
1

Neo4j rest apiを使用して、より多くのノードとリレーションシップを持つグラフ構造を作成しています。私は、以下のCypherクエリフォーマットを使用して、ノードのバッチとそれらの関係を1回のポストリクエストで送信しました。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 

から

出力このジャージクライアントを使用して、残りのAPIをのNeo4jに送られ、完全な要求です。

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のAPI、のNeo4jブラウザ、neo4j-では動作しないだろうというとき、私は、サイド追跡RESTコンテキストによってですシェルなど)。

すべてのファイルのサイズによると、データベースにはまたはノードという関係はありません。あなたのクエリはノード上で一致することから始まります:何もないので、CREATE句は決して実行されません。

まだ存在しないノードを作成して関係を作成するには、MATCHの代わりにMERGEを使用する必要があります。あなたはまた、(それは同時にインデックスを作成します)のノードにラベルを設定し、パフォーマンスと正確性のために、そのラベルの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

関連する問題