2017-04-09 9 views
1

neo4jにたくさんのデータを挿入すると、Neo4jにメモリの問題があります。それぞれの大きな治療の後にsession.clear()を追加した後には改善されました。neo4j Session.clear in multiple thread

私はすべての挿入に異なるスレッドを作るつもりです。すべてのスレッドをsession.clear()で終了する必要がありますか?何が結果になるでしょうか?

+1

注セッションはスレッドセーフなので、あなたがスレッドごとに1セッションを持っていることを確認していないこと。 – nmervaillie

答えて

3

session.clear()バッチ処理中にメモリを解放することをお勧めします。

セッションが何をしているのかを分析すると、なぜそれをクリアするべきかを理解するのに役立ちます。

合計1000個のエンティティで読み込んだとします。セッション上のすべてのセーブコールでは、すべてのエンティティに可能な変更があるかどうかチェックし、必要に応じてそれらを保持する必要があります(プロパティが変更されたかどうかをチェックし、オブジェクトグラフのリレーション参照も変更されているかどうかを確認します)。

これらのエンティティで何もしないと非常に高額です。

スレッド間でセッションが共有されていない場合(スレッドごとに1つの別個のセッションと呼ばれる)、スレッドで大量の操作を行った後にセッションをクリアすることは安全です。

あなたは、バッチ挿入中にさらにパフォーマンスを考慮して、この質問に私の答えをチェックしたい場合があります:Why is neo4j's insert speed so low in this example?

+0

たくさんあります。 neo4j-data-springでは、どのようにして異なるスレッドで異なるセッションを使用しますか? –

+0

各スレッドでセッションのインスタンスを作成します。 –