슈퍼노드와 팬아웃
연결이 극단적으로 몰린 노드를 지나는 순간 탐색량이 폭발하는 문제와, 모델과 질의 순서로 이를 줄이는 방법을 봅니다.
이번 회차, 내 속도로.
기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 44로 돌아옵니다.
난이도·관심 주제 고르기
1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.
이렇게 다녀와요 1단계 · 약 12분
- 출발 · DAY 44슈퍼노드·팬아웃
- 1. 관심 주제다중 레이블·레이블 선택추가 17 · 새 추가 수업
- 복귀 · DAY 44원래 회차 이어가기
- 다중 레이블·레이블 선택 · DAY 41에서 값의 자리를 고르는 법을 배운 뒤, 레이블이라는 또 하나의 선택지를 언제 쓰는지 보충하러 옵니다.
선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.
핵심 개념
슈퍼노드(supernode, 조밀 노드)는 관계가 극단적으로 많은 노드입니다. 모든 사용자를 (:Country {name:'대한민국'})에 LIVES_IN으로 이으면 이 노드 하나에 수백만 관계가 붙습니다. DAY 8에서 본 것처럼 실제 네트워크에는 허브가 흔합니다. 한 노드에서 한 홉에 펼쳐지는 관계 수를 팬아웃(fan-out)이라고 합니다.
질의가 슈퍼노드를 지나면 그 차수만큼 탐색이 곱해집니다. ‘민수와 같은 나라에 사는 사람이 쓴 논문’은 민수→대한민국→수백만 명→각자의 논문으로 퍼집니다. 최종 답이 몇 줄이어도 엔진은 중간의 수백만 관계를 확인해야 합니다. 가변 길이 패턴(DAY 33)이 허브를 지나면 문제는 더 커집니다.
대표적인 완화 방법은 세 가지입니다. 첫째, 관계 타입을 세분화해 필요한 타입만 펼칩니다. 모든 연결이 RELATED_TO이면 거를 방법이 없습니다. 둘째, 선택적인 쪽에서 출발해 허브는 마지막에 확인하도록 질의 순서를 정합니다. 셋째, 허브를 지역·연도 같은 버킷 노드로 나눕니다. 값 종류가 적고 질문에 거의 쓰이지 않는 값은 처음부터 속성으로 두는 것도 방법입니다.
각 방법에는 비용이 있습니다. 버킷 노드는 홉을 하나 늘리고, 타입 세분화는 질의에 적을 타입 목록을 길게 만듭니다. 그래서 먼저 차수 분포를 확인해 실제로 허브가 있는지 보고, 실행 계획에서 어느 단계가 많은 행을 만드는지 측정한 뒤 고치는 것이 순서입니다. 실험의 수치는 이 감각을 위한 가상 값입니다.
작은 예제로 따라가기
대한민국 노드의 관계가 1,000,000개이면 민수→대한민국→사람 2홉 탐색은 관계 약 1,000,001개를 확인합니다.
그중 LIVES_IN이 600,000개, BORN_IN이 400,000개로 타입이 나뉘어 있으면 LIVES_IN만 펼쳐 약 600,001개로 줄어듭니다.
‘대한민국에 사는 그래프연구실 사람’은 그래프연구실(3명)에서 출발해 각자의 LIVES_IN을 하나씩 확인하면 WORKS_AT 3개 + LIVES_IN 3개 = 관계 6개면 됩니다.
직접 실험해 보기
허브의 연결 수를 10에서 1,000,000까지 올리고 홉 수를 바꾸며 방문할 엣지 수(가상)를 기록한 뒤, ‘관계 타입 세분화/필터 먼저’ 토글을 켜서 얼마나 줄어드는지 비교하세요.
허브 하나가 탐색을 폭발시키는 정도 재기
| 홉 | 기본 | 완화 적용 |
|---|---|---|
| 1 | 1,000,000 | 1,000,000 |
| 2 | 20,000,000 | 20,000,000 |
MATCH (:Person {name: '민수'})-[]->
(c:Country {name: '대한민국'})
<-[]-(p:Person)
MATCH (p)-[:KNOWS]->(f1)
RETURN count(*)학습용 가상 수치다. 허브 이후 노드의 평균 연결은 20개로 두었다. 관계 타입을 세분화하면(LIVES_IN만) 다른 타입 엣지를 건너뛰고, 지역 버킷 노드를 두면 허브 전체 대신 한 버킷만 펼치며, 선택적인 필터를 확장 전에 걸면 다음 홉으로 가는 노드가 준다.
이번에는 직접 풀어 보세요
정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.
힌트 보기
(2)는 WORKS_AT 3개와 사람마다 LIVES_IN 1개를 확인한다고 봅니다.
풀이와 비교하기
(1)은 LIVES_IN 200,000개를 펼친 뒤 각 사람의 소속까지 확인해야 하므로 적어도 200,000개입니다(타입을 나누지 않았다면 250,000개). (2)는 WORKS_AT 3개 + LIVES_IN 3개 = 6개입니다.
풀이와 확인 표시는 이 브라우저에 저장됩니다.
오늘 이해한 것과 다시 볼 것
계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.
메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.오늘의 이해 확인
슈퍼노드 ‘대한민국’을 지나는 질의 ‘대한민국에 사는 그래프연구실 사람’에서 탐색량을 가장 크게 줄이는 방법은?
완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1
더 깊이 읽기
예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.
Modeling designsNeo4j Getting StartedEmergence of Scaling in Random NetworksBarabási & Albert (1999)이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.