2016-07-27 24 views
2

私はneo4jグラフを作成します。サイズは約5 GBです。 match (a)-[:know]-(b),(b)-[:know]-(c) merge (a)-[:maybe_know]-(c)のようなサイファークエリを使用して各ノードにリレーションを追加する場合は、GC overhead limitというエラーが発生します。私はneo4jのメモリを増やしたくありません。ノードを段階的に更新する方法はありますか?最初に、5000ノード、次に5000ノード、...これについて他の提案がありますか?Neo4j GCオーバーヘッド上限

+1

「LIMIT 5000」はおそらく?クエリが安定している場合(毎回同じ順序が生成されます)、「SKIP 5000 LIMIT 5000」、「SKIP 10000 LIMIT 5000」などをフォローアップすることができます。 –

答えて

1

@twobitと同様に、バッチを扱いやすいものに制限するだけでなく、まだマッチしていないものにも一致します。すなわち、acがすでにknowである場合、またはそれらの間に既に関係が作成されている場合は、再びそれらと一致することはありません。 Youldは、同じIDを2回(各方向に1回)作成しないように、IDのIDが他よりも大きいことを確認することもできます。

match (a)-[:know]-(b),(b)-[:know]-(c) 
where a <> c 
    and not (a)-[:know|maybe_know]-(c) 
    and id(a) > id(c) 
merge (a)-[:maybe_know]-(c) 
limit 1000 
+0

LIMITの位置は問題ですか? LIMITでWHEREの後にWITHを使用してマージを行った場合、またはその最適化を世話している場合、パフォーマンスの改善はありますか? – InverseFalcon

+0

私はそれらがほぼ同じであると期待します。ただし、正確に同じデータセットで各バージョンのプロファイルを作成することができます。 –

関連する問題