본 연구에서는 스파인-리프 네트워크 아키텍처를 나타내는 데이터를 쿼리할 때 GraphDB(Neo4j) 및 RDB(PostgreSQL)의 검색 속도를 벤치마킹합니다. 결과에 따르면 노드 수가 많고 깊이가 깊은 데이터 세트에서는 GraphDB가 RDB보다 성능이 뛰어난 것으로 나타났습니다.
테스트 환경에서는 Neo4j(버전 5.26.0) 및 PostgreSQL(버전 15)용 Docker 컨테이너를 활용했습니다. Docker Compose 파일은 다음과 같습니다.
<code class="language-yaml">version: '3' services: postgres: image: postgres:15 ports: - 5433:5432 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres neo4j: image: neo4j:5.26.0 ports: - 7474:7474 - 7687:7687 adminer: image: adminer restart: always ports: - 8080:8080</code>
스파인-리프 및 가상화 아키텍처의 변형을 기반으로 하는 세 가지 시나리오가 테스트되었습니다.
데이터 모델링은 데이터베이스마다 다릅니다.
has_parent
및 has_child
관계가 있는 장치를 나타냅니다. 시나리오 1에 대한 샘플 쿼리:<code class="language-cypher">CREATE (ssw1: SpineSwitch {name: "ssw1"}) CREATE (ssw2: SpineSwitch {name: "ssw2"}) ... CREATE (ssw1)-[:has_child]->(lsw1) ...</code>
nodes
, relationships
두 개의 테이블을 사용했습니다.<code class="language-sql">CREATE TABLE nodes ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL UNIQUE, type VARCHAR(50) NOT NULL ); CREATE TABLE relationships ( id SERIAL PRIMARY KEY, parent_id INT NOT NULL, child_id INT NOT NULL, relationship_type VARCHAR(50) NOT NULL, FOREIGN KEY (parent_id) REFERENCES nodes (id), FOREIGN KEY (child_id) REFERENCES nodes (id) );</code>
특정 서비스("srv1")에서 스파인 스위치까지의 경로를 찾기 위한 검색 쿼리입니다. 쿼리 실행 및 타이밍에는 Neo4j의 GraphDatabase
드라이버와 psycopg2
이 포함된 Python 스크립트가 사용되었습니다.
시나리오별 검색 속도 비교는 다음과 같습니다.
결과는 GraphDB가 복잡한 관계를 탐색할 때 그래프 데이터베이스의 고유한 강점과 일치하면서 노드 수가 많고 깊이가 상당한 데이터세트에 훨씬 더 효율적이라는 것을 보여줍니다. 데이터 세트가 작을수록 성능 차이가 덜 두드러집니다.
또한 PostgreSQL의 동등한 SQL 쿼리의 복잡성과 비교하여 Neo4j의 Cypher 쿼리의 단순성은 고려해야 할 중요한 요소입니다. 쿼리 복잡성의 이러한 차이는 그래프와 유사한 데이터 구조를 다룰 때 GraphDB를 전반적으로 선호하는 데 영향을 미칩니다.
위 내용은 CMDB용 GraphDB의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!