관계 탐색은 조인으로 복원할 수도, 저장된 엣지를 따라갈 수도 있다
RDBMS와 Graph DB의 차이는 “빠르다/느리다”가 아니라 관계를 저장하고 따라가는 방식입니다. 성능은 깊이, 차수, 인덱스, 쿼리 조건, 데이터 분포가 함께 결정합니다.
질문: 김철수의 친구가 산 상품 중, 김철수가 아직 사지 않은
것은?
사람에서 친구로, 다시 구매 상품으로 이어지는 다단계 관계
탐색입니다.
사람
친구
상품
RDBMS
관계는 조회 시점에 조인으로 만든다
정규화된 테이블과 외래 키를 연결합니다. 인덱스, 조인 최적화, 재귀 CTE, 비정규화가 있으면 상당히 잘 대응할 수 있습니다.
1
출발 사용자 찾기users에서 id를 얻고 조인 조건으로 넘깁니다.
2
친구 관계 조인friend_map을 붙여 친구 id 집합을 만듭니다.
3
구매 이력 조인orders와 products를 붙이고 제외 조건을 적용합니다.
users JOIN friend_map JOIN orders JOIN products
WHERE users.name = '김철수'
WHERE users.name = '김철수'
Graph DB
저장된 엣지를 따라 탐색한다
관계가 엣지로 저장되어 있어 출발 노드와 관계 이름이 분명한 탐색에서 모델과 실행 경로가 자연스럽게 맞습니다.
1
김철수 노드에서 시작탐색의 시작점을 빠르게 고정합니다.
2
FRIEND 엣지 이동친구 관계로 연결된 노드만 따라갑니다.
3
BOUGHT 엣지 이동친구가 산 상품 노드에 도착합니다.
(김철수)-[:FRIEND]->(친구)-[:BOUGHT]->(상품)
좋은 조건
깊고 반복적인 관계 탐색
친구의 친구, 추천 경로, 사기 연결망처럼 경로 자체가 질문일 때
유리한 경우가 많습니다.
확인할 조건
차수와 경로 폭발
연결이 너무 많은 노드나 느슨한 조건은 Graph DB에서도 비용이 커질 수
있습니다.
다른 선택
집계·범위·리포팅
대량 집계와 정형 리포팅은 관계형 DB나 분석 DB가 더 단순할 수
있습니다.
정리
Graph DB는 RDBMS의 상위호환이 아니라
관계가 질문의 중심인 워크로드에 맞춘 선택지입니다.
깊은 탐색일수록 유리한 경우가 많지만, 설계와 데이터 분포를 함께 봐야
합니다.