Neo4j의 Java API 버전 3.1.0-M08을 사용하여 Dijkstra 알고리즘을 사용하여 최단 경로 검색을 구축했습니다. 디스크에 28GB의 많은 데이터가 있습니다. 노드는 도시를 나타내고 관계는 연결을 나타냅니다. 일반적으로 도시에는 아주 많은 수의 연결이 있습니다. 내 PathExpander
에서 나는 전체 그래프의 극히 일부분 만 통과하는 많은 수의 관계를 배제합니다. 그럼에도 불구하고, 검색 지독하게 수행Neo4j Java API : 불량 다이크 스트라 성능
가와 CostEvaluator
유형 Long
, Integer
의 속성을 읽고 PathExpander
:
Relations traversed: 5343
Duration: ~14s
Performance: 373 relations/s
이 같은 예열 실행의 뜨거운 방법이 보인다 프로파일 무엇인가 Double
. 전화를 getProperty
으로 바꾸고, 도움이되지 않은 getAllProperties
으로 바꾸려고했습니다.
응용 프로그램은 다음 JVM 인수로 실행됩니다 : -Xmx10g -Xms10g
. SSD가 상당히 빠르며 동일한 검색을 두 번 실행하여 측정하기 전에 캐시를 미리로드해야합니다. 두 번째 실행부터는 디스크 활동이 표시되지 않습니다. 즉, 가로 이동 된 그래프가 RAM에 있어야합니다.
나는 기본 인수를 사용하여 GraphDatabaseFactory
을 호출합니다. 사용자 지정 구성으로 성능이 향상 될 수 있습니까? 테스트 용으로 16GB RAM 만 있습니다.