2016-07-25 2 views
0

私はneo4jに挿入したいデータがあります。Neo4jインポートジョブが関係として祖先を持つCSVから

最初はすべてのリレーションシップとノードをcqlファイルとして作成するためのスクリプトを作成しましたが、データセットの量は少なくて済みましたが、データセットが大きくなってシステムがクラッシュしました。

すべてのデータを入力するには、neo4j-shellを使用していたことに注意してください。

バッチインポーターでデータをバッチインサートすることはできますが、データセット全体には、リレーションシップを作成するために使用した祖先のテーブルが1つしかありません。

たとえば、1 => 1.2,1.2.1,1.2.2,1.3など。データを.csvに変換してインポートしたところ、すごくうまく機能していました。 ID、名前、および祖先を保持する1つのテーブルだけで、neo4jで作成される関係を取得するにはどうすればよいですか?今、我々は唯一のファジーアイデアを持っている...私はあなたが作成したスクリプトへと私たちに多くの情報を提供する必要があると思う

CREATE CONSTRAINT ON (n:Data) ASSERT n.id IS UNIQUE 

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS line 
CREATE (n:Data {id: line.id, name: line.name}) 

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:///data.csv" AS line 
MATCH (n:Data {id: line.id}), (a:Data {id: line.ancestry}) 
MERGE (n)-[:HAS_ANCESTOR]->(a) 
+0

:大規模なデータセットについて – InverseFalcon

+0

私はみんなを混乱させて申し訳ありません。私のスクリプトは各レコードを調べ、ノードとその関係を作成します。私は子供がいる場合、それは親に属していることを知っているので、それを簡単にした祖先の関係を使用してこれを処理しました。私は値がノードと関係としてneo4j dbに格納されることを知っています。小さなデータセットではうまくいきましたが、小さなデータセットで作業してしまえば、私はデータベース全体で同じスクリプトを使いました。ハングアップします。私のdbは、ID、名前、祖先(親)を列として持つ単一のテーブルにすべての関係とコンポーネントを持っています。 – user3831375

+1

バッチインサートがうまくいくでしょう(CSVからのインポートでは、定期的なコミット機能を使って処理速度を大幅に向上させることができます)...それでも機能しない場合は、一度にセグメントのみを処理する方法が必要です。説明にあなたのスクリプトを追加できますか? – InverseFalcon

答えて

1

は、あなたが USING PERIODIC COMMIT LOAD CSVと結合する必要がありますあなたのグラフのDBがどのように見えるのか。必要なものがいくつかのデータを持つ単一のテーブルであれば、neo4jがこれに適したツールであるかどうか尋ねる必要があります。 DBからデータをどのように格納するのか、クエリからの出力を混乱させるかどうかも疑問です。出力は単一のテーブルのように見えるかもしれませんが、ノードとノードとしてdbに格納されます。
+0

ありがとうこれは非常に近いです。 2番目のステートメントを実行する時間はどれくらいですか?私は今、約5分走っていた。 – user3831375

+0

あなたのCSVファイルにいくつの行があるかによって異なります。実際に 'id'プロパティに一意制約を作成して、' MATCH'が高速になります(完全なノードスキャンの代わりにインデックスを使用) CREATE CONSTRAINT ON(n:データ)ASSERT n.id IS UNIQUE'](http://neo4j.com/docs/developer-manual/3.0/#query-constraints-unique-nodes)を参照してください。 –

+0

ありがとうございました!しかし、それは一層深いところに行くだけですが、私はそれをどのように修正できるか知っていますか?最初の親と子の関係はhas_ancestorとして表示されますが、残りは表示されません。それがなぜ起こっているのか知っていますか? – user3831375

関連する問題