neo4j (또한 neo4j 그래프 데이터베이스 책에서도)가 만든 관계형 dbms에 대한 네이티브 스토리지를 사용하는 그래프 dbms를 선호하는 논점은 "인덱스없는 인접성"이 데이터를 처리하는 가장 효율적인 방법이라는 것입니다. 그래프 (그래프 기반 모델에서 데이터/노드의 '클러스터링'으로 인해).Neo4j 확장 성과 인덱싱
3 개의 노드가 순차적으로 (A-> B < -C) 연결되어 있으며 A의 ID가 주어진 경우 수행 한 일부 벤치마킹에 따라 C에 대해 쿼리 할 때 확장 성이 명확하게 O (n) 일 때 1M, 5M, 10M 및 20M 노드가있는 데이터베이스에 대해 동일한 쿼리를 테스트합니다. 내 쿼리를 1 노드로만 제한하고 있으므로 모든 노드가 일치하는지 검사해야한다는 점을 고려하면 합리적입니다 (제한된 이해로). 그러나 쿼리 된 노드 속성을 인덱싱 할 때 동일한 쿼리의 실행 시간은 상대적으로 일정합니다.
그림은 인덱싱 전후의 데이터베이스 노드 크기에 따른 실행 시간을 보여줍니다. 주황색 그림은 O (N) 기준선이며 파란색 그림은 관찰 된 실행 시간입니다.
인덱스 기반의 인접성의 이점이 어디에서 오는 것인지 알아 내려고합니다.이 링크는 깊이 (어) 링크에 대해 1 제한으로 쿼리 할 때 유리합니까? 예 : A -> B -> C -> D -> E에서 4의 깊이를 가지며 A가 주어진 E를 쿼리합니다.이 경우 A에 대해 단 하나의 일치가 있음을 알기 때문에 (따라서 모든 다른 이 서브 네트워크의 일부가 아닌 노드).
이것은 쿼리에 크게 의존하므로 아래에 참조 용으로 Cypher 쿼리의 예를 나열합니다 (여기서 id가 1 인 노드와 레이블이 지정된 엔티티가 일치하고 위의 B 노드를 반환 함). 예)와 세컨더리 링크 노드 위의 예에서 (C))
MATCH (:entity{id:1})-[:LINK]->(result_assoc:assoc)<-[:LINK]-(result_entity:entity) RETURN result_entity, result_assoc
UPDATE/ADDITIONAL INFORMATION
This source 상태 "인덱스없이 인접하는 키 메시지는 인 것을 전체 그래프를 통과하는 복잡성은 O (n)입니다. 여기서 n은 노드의 수입니다. 대조적으로, 모든 색인을 사용하면 복잡성 O (n log n)을 갖게됩니다. ". 이 문장은 색인 생성 전에 O (n) 결과를 설명합니다. 색인 생성 후 O (1) 성능은 해시 목록 성능 (?)과 동일하다고 생각합니다. 왜 다른 인덱스를 사용하여 복잡도가 O (n log n)인지는 모르겠지만 해시 목록을 사용하더라도 최악의 경우는 O (n)입니다.
하향 투표가 쉽습니다. 왜 더 나은 질문을 공식화하는 것이 더 도움이 될지 논평하는 것. – dter
Neo4j 서적은 RM (관계형 모델)을 오해하고 오해합니다. 오해 중 하나는 RM이 구현과 관련이 있다는 것입니다. 관계는 추상입니다. 어쨌든 "색인"은 밀짚 맨입니다. 여러 구현 구조를 사용할 수있는 이점은 여러 값을 스캔하지 않고 쿼리를 수행 할 때 쿼리가 향상된다는 것입니다. 궁극적으로 그들은 단지 RDBMS가 아닌 특정 유스 케이스에 최적화되어 있다고 말하고 있습니다. 꼬리가 개를 휘젓습니다. https://stackoverflow.com/a/28799902/3404097 – philipxy
@philipxy 테스트의 개념은 노드의 수에 따라 실행 시간이 어떻게 달라지는 지에 대한 아이디어를 얻는 것이 었습니다. 전반적인 경향은 절대 값 이상 이었기 때문에 아키텍처와 시스템 이 경우 일정하게 유지되었다. 확장 성의 선형성으로 인해 인덱스 비어있는 인접성의 장점은 무엇입니까? 최악의 인덱스의 키가 벌써 선형 인 경우 그래서 차이점을 확인하기 위해 색인 테스트를 실행했습니다. 이것은 거의 O (1)을 얻습니다. 이것은 해시리스트의 최상의 성능입니다. 나는 색인 자유로운 adjacency가 유리한 방법 보지 않는다. – dter