2017-01-25 15 views
0

テスト目的のために、別のデータソースからneo4jにデータをインポートしました。 データをノードとしてのみインポートしました。今私はインポートされたIDに基づいてエッジを追加したいと思います。すべてのノードは、2つのフィールドパフォーマンス:プロパティIDに基づいてneo4jで関係を作成する

  • がIDた:から文字列
  • などの識別が含まれていますパフォーマンスの改善の文字列として、すべての接続が含まれている[]

私もpropertiy「IDのインデックスを作成しました"のインデックスと" from "プロパティ

最初に両方のプロパティをStringとして(カンマ区切りのStringとしてリストから)作成しました。

これは動作しますが、本当に遅いです:

MATCH (e:Test1),(r:Test2) 
WHERE r.from CONTAINS e._id 
MERGE (e)-[:HAS]->(r) 

は、より良い方法はありますか?

PS:私はまたfromフィールドをString []として保存しようとしました。私は次のクエリを使用されるよりも

MATCH (e:Test1),(r:Test2) 
WHERE e._id IN r.from 
MERGE (e)-[:HAS]->(r) 

- デカルト積を - >パフォーマンス問題は、すべてのコンポーネントの組み合わせを取ることで、同じ

答えて

1

です。両方の場合において。より多くは、識別子にsplit the string by commaする方が良いでしょう。たとえば:

MATCH (T2:Test2) 
UNWIND split(T2.from, ",") as id 
MATCH (T1:Test1) WHERE T1._id = id 
MERGE (T1)-[:HAS]->(T2) 
あなたは配列内の識別子を続ければ

または、:

MATCH (T2:Test2) 
UNWIND T2.from as id 
MATCH (T1:Test1) WHERE T1._id = id 
MERGE (T1)-[:HAS]->(T2) 

そして、もちろん、インデックスを忘れないでください。

+0

ありがとうございます。これは非常にうまくいった。 – mabr

1

実際には、インポート時にfromプロパティを作成する代わりに:HASという関係を作成する必要があります(リレーションシップを作成するために無駄な追加クエリを作成する必要があります。削除する)。

LOAD CSV WITH HEADERS FROM "file:///input.csv" AS row 
MERGE (t2:Test2 {id: row.test2Id}) 
WITH row, t2 
UNWIND row.from AS t1Id 
MERGE (t1:Test1 {id: t1Id}) 
MERGE (t1)-[:HAS]->(t2); 
:インポートする LOAD CSVを使用していて、インポートファイルが test2Idfrom列(それぞれの文字列と文字列のコレクションを、)を持っていれば

たとえば、このインポートクエリは、すべてのノードとの関係を作成する必要があります

パフォーマンスを向上させるには、:Test1(id):Test2(id)の両方のインデックスが必要です。

+0

私の使用例の問題は次のとおりです。すべてのid/from関係が所定の時刻まで有効かどうかは不明です。データソースにはトランザクションまたは有効な参照の概念がありません。だから、私は '非同期'エッジ/ノードの作成を余儀なくされている – mabr

関連する問題