2017-04-09 1 views
1

neo4j에 많은 데이터를 삽입하면 Neo4j에 메모리 문제가 있습니다. 각 큰 치료 후에 session.clear()을 추가 한 후에 상황이 개선되었습니다.neo4j Session.clear in multiple thread

모든 삽입마다 다른 스레드를 만들 계획입니다. session.clear()으로 모든 스레드를 끝내야합니까? 결과는 무엇입니까?

+1

참고. – nmervaillie

답변

3

session.clear()은 배치 작업 중에 메모리를 비우는 것이 좋습니다.

세션을 수행하고있는 내용을 분석하면 이유를 이해하는 데 도움이됩니다.

총 1000 개의 엔티티를로드한다고 가정 해 보겠습니다. 세션의 모든 저장 호출에서 가능한 변경 사항을 모든 엔티티에서 점검하고 필요할 경우이를 유지해야합니다 (따라서 특성이 변경되었는지, 오브젝트 그래프의 관계 참조도 변경되었는지 확인).

엔티티에 아무 것도하지 않으면 매우 비쌉니다.

귀하의 질문에 대해서는, 세션이 스레드 (별개로 스레드 당 하나의 별개의 세션)간에 공유되지 않으면 스레드에서 과중한 작업을 수행 한 후에도 세션을 지우는 것이 안전합니다.

당신은 일괄 삽입하는 동안 더 성능 고려 사항에 대한이 질문에 대한 내 대답을 확인 할 수 있습니다

: 세션이 스레드 안전, 그래서 당신이 스레드 당 하나 개의 세션이 있는지 확인되지 않았 Why is neo4j's insert speed so low in this example?

+0

Thabks 많이 있습니다. neo4j-data-spring과 어떻게 다른 스레드에서 다른 세션을 사용합니까? –

+0

각 스레드에서 세션의 인스턴스를 만듭니다. –