2013-03-12 6 views
3

Cypher를 중심으로 매우 흥미로운 튜토리얼을 작성한 후 Cypher 쿼리 언어의 선언성에 놀라움을 금치 못했습니다. 그것은 내 생각에 Neo4J에서 데이터를 검색하는 아주 자연스러운 방법입니다.일반 Cypher 성능

그 전에는 원시 API 만 사용했습니다. 그리고 그것이 덜 선언적이긴하지만, 잠시 후에 일종의 익숙해집니다. 복잡한 구조는 모두 매우 유사하며 특정 프로젝트의 세부 사항 만 다릅니다.

여전히 Cypher는 자연스러워 보였으므로 Cypher 쿼리를 사용하여 내 데이터베이스와 상호 작용하는 응용 프로그램의 두 번째 버전을 작성하려고합니다. 하지만 문제가 발생했습니다.

내 응용 프로그램을 Cypher로 변환 할 수있는 여러 가지 방법이 있으며 여러 가지 가능한 쿼리를 모두 시도한 후에 원하는 결과를 얻을 수 있습니다. 가장 빠른 쿼리조차도 기본 API보다 약 20 배 느립니다.

이제 declarativeness에 대한 성능을 포기하는 데 신경 쓰지 않지만 성능에 이미 어려움을 겪고있는 응용 프로그램에서 20 번은 나에게 많은 도움이됩니다. 이 문제의 해결 방법이 있습니까? 아니면 기본 API 만 사용해야합니까?

+0

일부 검색어를 공유해 주시겠습니까? 그리고 아마 당신의 데이터 세트? 그것을 보는 것을 좋아할 것입니다, 그것은 그렇게 느리지 않아야합니다. 어떤 Neo4j 버전을 사용하고 있습니까? –

+0

데이터 집합은 사용자가 업로드 한 파일에 따라 달라집니다. 나는 1.9.M05 atm을 사용하고 있지만, 나는 또한 최신 안정 버전으로 시도했다. 오늘 밤에 일부 질문을 올리 겠지만, 문제는 사이퍼에서 충분히 구체적 일 수 없다는 것입니다. 핵심 API를 사용하여 모든 단계를 신중하게 제어 할 수 있으며 데이터베이스 구조에 대한 지식을 갖추고 있으므로 Cypher에서해야 할 쓸모없는 관계를 거치지 않아도됩니다. –

답변

2

당신의 결론은 내게 아주 친숙한 것 같습니다. Neo4j와 Spring Data Neo4j를 함께 사용하면 성능 문제가 발생했습니다. 성능이 중요한 부분에서는 평균 Cypher 쿼리보다 훨씬 빠른 빠른 Traversal API로 전환했습니다. 이것은 질의 처리가 없다는 사실과 탐색의 모든 측면을 제어한다는 사실과 관련이 있습니다. Cypher는 가장 최적의 전략이 무엇인지 추측 할 수 있습니다. 나는 그것이 (가까운) 미래에 속도를 얻을 것이라고 확신하지만, 성능이 정말로 중요하다면 핵심 API에 집착한다.

또한 Java 및 스프링 데이터 neo4j를 사용하려는 경우 간단한 매핑 모드보다 훨씬 빠른 고급 매핑 모드 (AspectJ)를 사용하는 것이 좋습니다.

+0

사실 스프링 데이터의 추가 된 레이어는 내가 한 몇 가지 테스트를 토대로 내 애플리케이션 속도를 늦추었다. 그래서 필자는 자신의 인터페이스를 만들어 특정 애플리케이션에 가장 효율적인 방식으로 데이터베이스와 직접 대화 할 수있었습니다. 인터페이스 구현을 Cypher로 전환하고 싶었지만 성능이 저하 될 것이라는 사실을 거의 알지 못했습니다. –

+0

Cypher는 항상 핵심 API를 사용하는 것보다 속도가 더 빠르지 만 Cypher 문을 조정할 수 있습니다. 이것은 많은 도움이 된 훌륭한 자료입니다. http://thought-bytes.blogspot.in/2013/01/optimizing-neo4j-cypher-queries.html – tstorms

+1

http : //www.rene -pickhardt.de/get-the-full-neo4j-power-by-using-the-core-java-api-for-traversing-your-graph-data-base-instead-of-cypher-query-language/. 핵심 API, 순회 API 및 여러 Cypher 버전의 속도를 비교합니다. – tstorms