JanusGraph 기초 개념 ⑦ / OLAP vs OLTP 탐색, 스토리지와 인덱스 백엔드, GraphComputer
이번 글에서는 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 기반 분석 실행 |