Neo4jでバイナリツリーを作成する必要があります。私は2つのCSVを作成することから始まりました.1つは頂点用、もう1つはエッジ用です。次にツリー全体を作成するために2つのクエリを起動しました。CSVからロードしてバイナリツリーを作成する
1つのクエリでツリー全体を作成できると思っていました。 CSV私は開始場所からこのです:
"parent","child_1","child_1_attr1","child_1_attr2","edge_1_attr1","edge_1_attr2","child_2","child_2_attr1","child_2_attr2","edge_2_attr1","edge_2_attr2"
"vertex_1","vertex_2","2","5","4","1","vertex_3","5","3","2","2"
"vertex_2","vertex_4","3","5","2","3","vertex_5","4","4","4","3"
"vertex_3","vertex_6","2","1","2","4","vertex_7","2","2","5","5"
"vertex_4","vertex_8","4","4","4","5","vertex_9","2","3","2","5"
"vertex_5","vertex_10","1","1","3","3","vertex_11","1","3","2","3"
"vertex_6","vertex_12","3","1","1","1","vertex_13","1","2","5","1"
"vertex_7","vertex_14","4","2","2","1","vertex_15","2","5","4","3"
は、その後、私はこのクエリを試してみました:
LOAD CSV WITH HEADERS FROM 'file:///Prova1.csv' AS line
Match (p:Vertex {name: line.parent})
Create (c1:Vertex {name: line.child_1, attr1: line.child_1_attr1, attr2: line.child_1_attr2})
Create (c2:Vertex {name: line.child_2, attr1: line.child_2_attr1, attr2: line.child_2_attr2})
Create (p)<-[:EDGE {attr1: line.edge_1_attr1, attr2: line.edge_1_attr2}]-(c1)
Create (p)<-[:EDGE {attr1: line.edge_2_attr1, attr2: line.edge_2_attr2}]-(c2)
私は手動で最初の頂点を作成し、私はこのクエリを実行しますが、これだけのクエリの前に結果はVertices 1,2,3の作成です。 これは親(これは常に作成済みです)と一致し、次に2つの子を作成し、次にこれらの2つの子を父に接続する必要があります。私を助けることができる
?
最初に、Cypherコードの実行の詳細な説明をありがとう、私は大学プロジェクトのために自分自身のNeo4jを学んでいるので、非常に便利です。このような簡単な言葉で説明するのは難しいです。 –
ところで、数日前、私はツリーを1つのクエリで作成することができました。このような小さなツリーの場合は機能します。実際には、少なくとも2百万のノードを持つツリーを管理する必要があり、この条件では2つのCSV(ノード用とエッジ用)を持つ2Mノードツリーの作成を改善するためにこの方法を検討していました300秒かかる(汎用ノートブックで 'USING PERIODIC COMMIT'を使用)。 クエリ「USING PERIODIC COMMIT」が機能すると思いますか?そして、このクエリが実際に作成時間を改善できると思いますか? –
PERIODIC COMMITを使用すると、インポートのパフォーマンスが向上するはずです。Vertex(名前)(または名前が頂点に固有でない場合は少なくともインデックス)に一意の制約が必要です。ノードに1つとエッジに2つのCSVを使用する場合は、関係CSVで頂点にMERGEの代わりにMATCHを自由に使用でき、ノード間の関係自体に対してCREATEを使用するとパフォーマンスが向上します。 – InverseFalcon