2016-03-19 8 views
0

私はデータベースに約81MBのCSVデータを入力しています。Neo4j 2.3.2 - データベースを起動できません

データは、私が明示的に作成したいいくつかの暗黙的な関係を持っているので、私は、次のコマンドを実行しました:私は.logファイルにこれらのメッセージの多くを見るために始めたコードを実行するには

with range(0,9) as numbers 
unwind numbers as n 
match (ks:KbWordSequence) where ks.kbid ends with tostring(n) 
match (kt:KbTextWord {kbid: ks.kbid}) 
create (kt)-[:SEQUENCE]->(ks) 
create (ks)-[:TEXT]->(kt) 

を:

2016-03-19 19:27:30.740+0000 WARN [o.n.k.i.c.MonitorGc] GC Monitor: Application threads blocked for 9149ms. 

これらのGCメッセージをしばらく見て、プロセスが6GのRAMを占有しているのを見て、私はWindowsプロセスを強制終了して再度関係を作成しようとしました。

これを実行したとき、私は次のエラーが発生し、データベースは起動しませんでした。

Starting Neo4j failed: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception. 

私が見ることができる.logファイルまたは他の対応するメッセージにエラーはありません。

この種のエラーの他の例は、私の状況では当てはまらないNeo4j dbバージョンミスマッチに対応しています。

この状態からどのように回復しますか?

答えて

0

この文はグローバル操作を引き起こすように見えるので、トランザクションが大きくなりすぎると思います。

with range(0,9) as numbers 
unwind numbers as n 
match (ks:KbWordSequence) where ks.kbid ends with tostring(n) 
match (kt:KbTextWord {kbid: ks.kbid}) 
return count(*) 

親指の目安として、10kから100kのアトミック操作は、適切なトランザクションサイズです。

with range(0,9) as numbers 
unwind numbers as n 
match (ks:KbWordSequence) where ks.kbid ends with tostring(n) 
match (kt:KbTextWord {kbid: ks.kbid}) 
with ks, kt skip 0 limit 50000 
create (kt)-[:SEQUENCE]->(ks) 
create (ks)-[:TEXT]->(kt) 
return count(*) 

、あなたが0の価値を取り戻すまで、時代のこの文のカップルを実行します。このことを念頭に置いて、トランザクション・サイズを制御するためにskiplimitを適用します。

実際のユースケースに応じて、スキップの使用を防止し、まだ処理されていないノードをマッチで直接検出する方法で、さらに効率的なアプローチが存在する可能性があります。

+0

このマージの「説明」は、それが処理すると見積もられるレコードの数が驚異的です。これは、KbTextWordが5001個のレコードを持ち、KbWordSequenceが1281793個の行を持つと考えると奇妙です。 –

関連する問題