카테고리 없음

JanusGraph 기초 개념 ⑦ / OLAP vs OLTP 탐색, 스토리지와 인덱스 백엔드, GraphComputer

Severus Moriarty 2025. 4. 16. 21:36

이번 글에서는 JanusGraph에서 꼭 알아야 할 고급 용어들인
OLAP/OLTP 트래버설, 스토리지 백엔드, 인덱스 백엔드, 그래프 컴퓨터에 대해 간단하지만 핵심적으로 정리해드립니다.

 

✅ 1. Traversal (탐색)이란?

JanusGraph에서 데이터를 조회하는 기본 방식은 Traversal (그래프 순회)입니다.
이것은 Gremlin 쿼리를 통해 그래프 구조를 따라 데이터를 탐색하는 방식입니다.

Traversal에는 두 가지 주요 방식이 존재합니다:

🔵 OLAP Traversal

  • 전체 그래프를 대상으로 하는 탐색
  • 예: 평균 나이, 페이지랭크, 커뮤니티 분석 등
  • 대규모 데이터 분석에 적합

예시 쿼리:

g.V().hasLabel('user').values('age').mean()

 

항목 설명
목적 전체 정점·간선을 대상으로 분석
처리 시간 장시간 수행 (long-running)
접근 방식 순차적 데이터 접근
처리 구조 병렬 처리, 배치 처리
사용 사례 Hadoop, Spark 기반 분석

 


🟢 OLTP Traversal

  • 소규모 부분 그래프만 탐색
  • 실시간 응답성 중시
  • 예: 특정 사용자의 친구 찾기, 단건 질의

예시 쿼리:

g.V().has('username','stephenm').out('knows').values('age').mean()

 

항목 설명
목적 특정 정점에서 시작해 인접 노드 탐색
처리 시간 빠름 (real-time)
접근 방식 임의 접근 (random access)
처리 구조 순차적 처리
사용 사례 REST API 연동, 실시간 사용자 쿼리 등

✅ 2. Storage Backend (스토리지 백엔드)

JanusGraph는 자체 저장소를 갖고 있지 않습니다.
대신 외부 데이터베이스를 스토리지 백엔드로 사용합니다.

즉, 정점(Vertex)과 간선(Edge)은 외부 DB에 저장되고,
JanusGraph는 그 DB에 쿼리를 날려 데이터를 가져옵니다.

🔧 대표 스토리지 백엔드

백엔드 특징
Apache Cassandra 분산 환경에 적합, 쓰기 속도 빠름
Apache HBase HDFS 기반, 대용량 분석 환경에 적합
Berkeley DB 경량 임베디드 DB, 단일 머신용
Google Cloud Bigtable GCP 기반, 확장성과 성능 우수
In-Memory 개발·테스트용 메모리 기반 저장소

스토리지 백엔드는 pluggable (교체 가능)하며, 설정 파일만 바꾸면 쉽게 전환할 수 있습니다.


✅ 3. Index Backend (인덱스 백엔드)

탐색 속도를 높이기 위해 JanusGraph는 외부 인덱스 엔진과도 연동할 수 있습니다.
이를 Index Backend (인덱스 백엔드)라고 부릅니다.

 

🔧 지원 인덱스 백엔드

백엔드
특징
Elasticsearch 가장 널리 쓰이는 검색엔진, 강력한 텍스트 검색
Solr Apache 기반 검색엔진, 안정적
Lucene 자바 기반 로컬 인덱싱, 성능 우수

 

 

예: g.V().has('name', 'Marko')처럼 속성 기반 조회 시 인덱스를 사용하면 훨씬 빠르게 결과 반환

🧠 "인덱스를 사용하면 훨씬 빠르게 결과 반환" 이란?

📌 비유로 설명해볼게요:

📚 도서관에서 책을 찾는다고 가정해봅시다.

  • 인덱스가 없는 경우
    → 책 이름이 "Marko"인 책을 찾으려면 모든 책장을 하나하나 다 뒤져야 해요.
    → 시간이 오래 걸려요 😥
  • 인덱스가 있는 경우
    → "책 제목 인덱스"를 펼쳐서 "Marko"가 몇 번째 칸에 있는지만 바로 보면 돼요.
    → 바로 찾을 수 있어요! ⚡

✅ 그럼 Gremlin 쿼리에서는?

g.V().has('name', 'Marko')
  • 이 쿼리는 그래프에서 name이 'Marko'인 정점을 찾는 쿼리예요.

✔️ 인덱스 없으면?

→ JanusGraph는 모든 정점을 하나하나 보면서 name이 Marko인지 확인해야 해요.
→ 느려요 (데이터가 많을수록 더 느려짐)

✔️ 인덱스 있으면?

→ JanusGraph는 "name" 속성이 인덱스에 등록돼 있어서
→ 바로 'Marko'인 정점을 빠르게 찾아낼 수 있어요!

🛠 JanusGraph에서 인덱스 만드는 예시 (Gremlin 기반)

mgmt = graph.openManagement()
nameProp = mgmt.getPropertyKey('name')
mgmt.buildIndex('byNameComposite', Vertex.class).addKey(nameProp).buildCompositeIndex()
mgmt.commit()

→ 이렇게 하면 'name' 속성에 대한 인덱스가 생성되어,
→ 다음부터 has('name', ...) 쿼리 실행이 훨씬 빨라집니다.

 


✅ 4. GraphComputer (그래프 컴퓨터)

JanusGraph는 외부 연산 플랫폼과 연동하여 대규모 계산을 수행할 수 있습니다.

이때 사용하는 구조가 GraphComputer입니다.

대표적으로 Apache Spark와 연동하여 페이지랭크, 커뮤니티 분석 등을 수행할 수 있습니다.

graph.compute().program(PageRankVertexProgram.build().create(graph)).submit().get()

역할:

  • Gremlin 기반의 분석 로직을 **외부 엔진(Spark/Hadoop)**에서 병렬로 실행
  • 대규모 그래프 분석과 리포팅에 필수

📌 요약


용어 설명 예시
OLAP Traversal 전체 그래프 분석 평균 나이 계산
OLTP Traversal 특정 정점 기반 탐색 친구 관계 질의
Storage Backend 외부 저장소 Cassandra, HBase 등
Index Backend 탐색 속도 향상 Elasticsearch, Solr 등
GraphComputer 외부 연산 연동 Spark 기반 분석 실행