JanusGraph/JanusGraph 실습

[실습] Gremlin vs Cypher 상황별 성능 비교 실험 설계

Severus Moriarty 2025. 4. 21. 21:26

✅ 1. 실험 목표 정의

 

실험 목적 비교 기준
그래프 쿼리 언어의 실행 성능 비교 Latency, Memory usage
표현력/추상화 수준 비교 쿼리 길이, 가독성
자동화 및 파이프라인 통합성 스크립트화/LLM 연계 가능성
확장성 노드/엣지 수 증가에 따른 처리 시간 변화

📁 2. 실험 구성 요소

📌 데이터셋

  • 사용 데이터: ogbl-wikikg2 (2.5M nodes, 16M triples)
  • 형식: JSON → Triple(subject, predicate, object) → Gremlin/Cypher 삽입
  • 구성: 관계(Pxxx) + 엔티티(Qxxx) 기반 그래프

🧪 실험 시나리오 분류 (작업 유형별)

상황 유형
설명 목적
단일 홉 조회 예: Q1 → P31 → Q2 기본 트래버설 속도 측정
다중 홉 경로 추적 예: Q1 → P31 → ... → Qn (depth 3~5) 경로 탐색 효율성 비교
조건 필터 포함 질의 예: P31이 Q5인 노드 중 P27이 Q145인 것 복잡도 대비 성능 측정
하위그래프 추출 특정 엔티티 기준 subgraph 반환 그래프 생성 및 필터링 성능
삽입/삭제 작업 노드 및 엣지 추가/제거 트랜잭션 처리 성능
링크 예측 시뮬레이션 특정 관계의 존재 여부 추정 ML 모델 연계 가능성

 

📊 Wikidata 기반 그래프 성능 비교 실험 흐름표

단계
처리 내용 설명 결과물
[1] Wikidata JSON 원본 데이터 수집 Wikidata에서 전체 JSON 덤프 다운로드 latest-all.json.bz2
↓ 파싱 및 전처리 필터링 및 관계 추출 주요 엔티티(Qxxx), 관계(Pxxx) 추출 및 전처리 subject, predicate, object 추출
[2] Triple 변환 그래프 구조로 재정렬 (subject, predicate, object) 형태의 삼중항 생성 Triple List
[3-A] Gremlin 삽입 JanusGraph 등 삽입 각 Triple을 Gremlin 트래버설 문법으로 변환 및 삽입 Gremlin 기반 그래프 DB
[3-B] Cypher 삽입 Neo4j 등 삽입 동일 Triple을 Cypher 문법으로 변환 및 삽입 Cypher 기반 그래프 DB
[4] 동일 쿼리 실행 시나리오 기반 쿼리 실행 단일 홉, 다중 홉, 필터 포함 질의 등 동일 실험 조건 적용 실행 결과 및 시간 측정
[5] 성능 비교 분석 및 정리 Latency, 표현력, 확장성, 유지보수성 등 비교 성능 분석 보고서 / 표 / 그래프

 

 


🧪 3. 실험 설계 및 평가 지표

🔸 Step 1. 데이터 삽입

  • 동일한 JSON → Triple 기반으로 두 개의 그래프 DB 생성(자동 변환 기능 활용)
    • Gremlin 기반: JanusGraph, TinkerGraph, Neptune 등
    • Cypher 기반: Neo4j
  • 삽입 시 각 엔티티는 (:Entity {id: 'Q42'}), 관계는 [:P31]로 표현

🔸 Step 2. 동일 쿼리 작성 및 실행

실험 항목 Gremlin 예시 Cypher 예시
단일 홉 탐색 g.V().has('id','Q42').out('P31') MATCH (a:Entity {id:'Q42'})-[:P31]->(b) RETURN b
다중 홉 탐색 g.V().has('id','Q42').repeat(out()).times(3) MATCH (a:Entity {id:'Q42'})-[:*1..3]->(b) RETURN b
조건 탐색 .has('P27','Q145') MATCH (a)-[:P27]->(b {id:'Q145'}) RETURN a
  • 각 쿼리별 실행 시간, 반환 노드 수, 표현 길이, 쿼리 난이도 기록

🔸 Step 3. 성능 측정 항목

지표 측정 방법
쿼리 Latency 평균 실행 시간 (ms)
메모리 사용량 실행 중 peak memory (MB)
쿼리 길이/가독성 라인 수, 중첩 구조 분석
확장성 샘플 그래프 크기 증가 대비 응답 시간 변화
에러 발생률 예외 발생 여부 (필터 실패, 노드 미탐색 등)
자동화 연계성 API 연동 편의성, LLM이 쿼리 생성 시 정확도
쿼리 표현력 
도메인 별 표현의 쿼리 표현 변환 가능성

🎯 결과 정리 및 분석 방식

📈 결과 시각화 예시

  • 쿼리별 Latency bar chart
  • 그래프 크기 대비 응답 시간 line chart
  • 쿼리 길이 대비 표현력 scatter plot
  • 쿼리 자동 생성 정확도 비교 표

🔄 반복 실험 조건

조건 설명
그래프 크기 변화 10K → 100K → 1M 노드로 점진적 확장
관계 밀도 변화 Triple 수 2x/5x/10x 증가
캐시 여부 cold-start vs warm-cache 구분

📌 실험을 통해 알 수 있는 것(예상)

항목
Gremlin 우위 Cypher 우위
경로 탐색/복잡 쿼리 ✅ 다중 홉 + 조건 처리 ⚠️ 표현 복잡
초보자 친화적 질의 ⚠️ 문법 난해 ✅ SQL 유사
대규모 분산 환경 ✅ TinkerPop 기반 확장성 ⚠️ Neo4j 한정
자동화 및 LLM 연계 ✅ 함수형 쿼리 조합 ⚠️ 선언적 구조 제한