2016-06-20 2 views
0

나는 6 천 8 백만 데이터 포인트보다 큰 데이터 세트를 가지고 있습니다. 데이터는 현재 MongoDB에 저장되어 있으며 데이터 포인트를 연결하고 Cypher 명령을 사용하여 Neo4j 데이터베이스에 저장하는 데이터를 처리하는 Java 프로그램을 작성했습니다. 나는이 프로그램을 테스트 세트의 데이터 (~ 150 만)로 실행했고, 작동하여 하룻밤 사이에 실행했다. 이제 전체 데이터 세트를 가져 오려고하면 프로그램이 매우 느립니다. 주말 내내 35 만개의 데이터 포인트 만 만들어 냈습니다. 짧은 테스트를 통해 Neo4j가 병목 현상이있는 것 같습니다. Java 프로그램을 중단 한 지 반 시간이 지났지 만 Neo4j의 CPU 사용량은 100 %이고 새 노드는 계속 추가됩니다 (Java 프로그램에서). 이 병목 현상을 극복 할 수있는 방법이 있습니까? 멀티 스레딩에 대해 생각해 봤지만 네트워크를 만들려고 할 때 많은 의존성과 스레드 안전하지 않은 작업이 수행됩니다. 당신의 도움을 주셔서 감사합니다!대용량 데이터 세트를 Neo4j로 가져 오는 작업은 매우 느립니다.

편집 : 내가 가지고있는 데이터는 사용자 목록입니다. 포함 된 데이터는 사용자 ID와 사용자의 친구 ID 배열입니다. 내 사이퍼 쿼리가 조금 같이 : 먼저이 봐야한다이

+0

몇 가지 예제 쿼리를 공유 할 수 있습니까? MERGE 또는 MATCH를 사용하는 경우 해당 Label + 속성 조합에 대한 색인이나 더 나은 제약 조건이 있는지 확인하십시오. –

+0

자바를 사용하는 경우 java neo4j api를 사용하는 것이 훨씬 빠르다 고 생각합니다. 사이퍼 쿼리를 번역해야합니다. – Mvde

답변

1

이 정말 끔찍한 경우, "u:USER {id:" + currentID + "}) CREATE (u)-[:FRIENDS {ts:" + timeStamp}]->(u" + connectionID + ":USER {id:" + connectionID + "})" 죄송합니다 아주 새로운 : neo4j import slowing down

여전히 DIY로 결정하는 경우

, 주의해야 할 몇 가지 사항이 있습니다. 첫째, 모든 트랜잭션을 하나의 트랜잭션으로 가져 오지 않도록하십시오. 그렇지 않으면 코드가 가비지 수집기에서 일시 중단되는 시간을 대부분 소비하게됩니다. 둘째, Neo4j 프로세스 (또는 Neo4j의 임베디드 인스턴스를 사용하는 경우 응용 프로그램)에 충분한 메모리를 확보했는지 확인하십시오. Neo4j는 6800 만개의 노드가 사소하지만 생성하는 Cypher가 지속적으로 상황을보고있는 경우. 새로운 관계를 만들면 충분한 메모리를 할당하지 않으면 심각한 페이징 문제가 발생합니다.

http://neo4j.com/news/labels-and-schema-indexes-in-neo4j/

1

당신이 neo4j.properties 및 neo4j - wrapper.conf 파일을 구성 했 : 당신이 (오히려 ID보다는) 속성으로 노드를 찾고 있다면 마지막으로, 당신은 라벨과 스키마 인덱스 사용되어야 하는가? 컴퓨터에서 사용할 수있는 RAM의 양에 따라 값을 조정하는 것이 좋습니다.

conf의/neo4j-wrapper.conf에서 나는 보통 12 기가 바이트의 RAM 서버

의 conf의
wrapper.java.initmemory=8000 
wrapper.java.maxmemory=8000 

/neo4j.properties을 사용 나는 가져올 완전한 예를 들어 http://neo4j.com/blog/import-10m-stack-overflow-questions/를 참조

dbms.pagecache.memory=8000 

설정 몇 분 안에 10M 노드, 좋은 출발점

SSD 가져 오기 속도를 높이는데도 좋습니다.

0

대용량 데이터를 데이터베이스에로드 할 때 배웠던 점 중 하나는 대상 테이블에서 인덱싱을 일시적으로 해제하는 것이 었습니다. 그렇지 않으면 새로 추가 된 모든 레코드가 인덱스에 대한 별도의 업데이트로 인해 로터이 디스크에서 작동합니다. 데이터로드가 완료된 후 별도의 작업으로 전체 테이블을 다시 인덱싱하는 것이 훨씬 빠릅니다. YMMV.

관련 문제