2016-11-18 6 views
0

私は大学にいくつかのことをしています。そして、何百万というノード(少なくとも1または200万人)を持つComplete Treesを構築するシステムを作るように求められました。 。 CSVをロードしてツリーを作成しようとしていましたが、定期的なコミットを使用していましたが、それは単なるノードの作成(汎用ノートブック:Pでは70000ミリ秒)でうまくいきました。私がエッジで同じことを試してみると、それも拡大しませんでした。Neo4j 3.0.4で何百万ものVertex Treeを作成/管理しています

Using periodic commit LOAD CSV WITH HEADERS FROM 'file:///Archi.csv' AS line 
Merge (:Vertex {name:line.from})<-[:EDGE {attr1: toFloat(line.attr1), attr2:toFloat(line.attr2), attr3: toFloat(line.attr3), attr4: toFloat(line.attr4), attr5: toFloat(line.attr5)}]-(:Vertex {name:line.to}) 

5分以内にツリーが生成されることを保証する必要があります。

このようなパフォーマンスを返す方法はありますか?

P.S. :タスクはNeo4jを使用するのではなく、データベース(SQLまたはNoSQLのいずれか)を使用することを期待していますが、このNoSQLグラフDBを見つけました。グラフデータ構造が無償で提供されているので、

P.P.S:私は私はあなたがそれをやっている正確に理解を確認するために、再度、開発者向けドキュメントにMERGE上に読むべきだと思うサイファー

答えて

1

を使用しています。

あなたがマージされているパターンが存在しない場合は

...注意すべき具体的にはいくつかのこと、パターンのすべての要素が重複につながる可能性がある、マージされます:頂点ノードが作成されます。あなたの:Vertexesがすでにデータベースに存在していて、まだ関係がない場合、CSVで関係が繰り返されていないことが確かな場合は、開始ノードと終了ノードをMATCHすることを強くお勧めしますMERGEの代わりにそれらの間の関係を作成します。多くのアトリビュートとの関係でMERGEを実行すると、最初にマッチするようになることを覚えておいてください。ノード間のリレーションシップの数が増えると、比較回数が増え、クエリがさらに遅くなります。関係が複製されないことがわかっている場合、およびそれらの関係がまだ存在しないことが確実である場合は、CREATEを使用することをお勧めします。

また、エンドノードでのマッチングに役立つように、Vertex(name)でインデックスを作成することを強くお勧めします。

+0

まず、おかげされです。多分あなたを笑わせてくれる一つの質問があります。 :スキーマインデックスの仕組みとクエリの改善方法 –

+0

開発者向けドキュメントには、[スキーマのセクション](https://neo4j.com/docs/developer-manual/current/cypher/#cypher-schema)があります。通常、特定のラベルを持つノードのプロパティに一意制約またはスキーマインデックスを作成して、そのプロパティでそのラベルを持つノードをルックアップするときのパフォーマンスを向上させます。 Vertex(name)でインデックスを作成すると、次のような検索ができます。Vertexノードを名前で結びつけます(ノード間の関係を作るためにこれらのノードに一致するときなど)。それ以外の場合は、すべてをスキャンする必要があります:名前プロパティによって頂点ノード。 – InverseFalcon

+0

スーパーインポーターメソッドはどうですか?ドキュメンテーションによれば、このツールはCSV形式の巨大なデータセットに必要なものですが、このツールは見つかりません。ツールは "path/to/neo4j/bin/neo4j-import"にありますが、ドキュメントは言いますが、私はそれを呼び出すことはできません。私はneo4j 3.0.4を使用しています –

関連する問題