30분
그래프 데이터 모델링 패턴: 좋은 KG vs 나쁜 KG
Neo4j & Cypher
그래프 데이터 모델링 패턴: 좋은 KG vs 나쁜 KG
온톨로지 & Knowledge Graph > Neo4j & Cypher
학습 목표
관계 vs 속성 vs 노드: 무엇을 무엇으로 표현할지 판단한다 Reification(관계의 속성 표현) 패턴을 익힌다 시간 데이터, 버전 관리, 계층 관계 모델링 패턴을 안다
같은 사실, 다른 모델링
"3호기에서 2024-01-15 오전 9시에 E-201 알람이 발생했고, 김기술이 30분 만에 해결했다."
이 한 문장을 KG로 어떻게 모델링할 것인가? 답이 여러 개다. 그리고 선택이 쿼리 성능과 확장성을 좌우한다.
패턴 1: 관계의 속성으로 (Edge Properties)
에디터 로딩 중...
언제 쓰나: 관계 자체에 다른 노드를 연결할 일이 없을 때.
패턴 2: Reification (사건을 노드로)
에디터 로딩 중...
언제 쓰나: 사건에 시간/작업자/첨부 등 부가 정보가 많을 때. 제조 정비 이력은 거의 항상 이 패턴.
패턴 3: 시간 데이터 모델링
시간은 KG에서 가장 까다로운 주제. 3가지 접근:
에디터 로딩 중...
권장: 제조 KG는 (A) 단순 속성 + (B) 시간 트리 보조 인덱스 조합.
패턴 4: 계층(Hierarchy) 모델링
공장 → 라인 → 설비 → 부품. 계층은 두 가지로 표현 가능.
에디터 로딩 중...
A vs B:
- A는 의미가 명확, 쿼리가 직관적
- B는 깊이 가변적인 경우 유리 (예: 회사 조직도)
- 제조 자산 계층은 A 권장 (의미가 다르면 관계도 달라야)
흔한 안티 패턴
에디터 로딩 중...
인덱스와 제약 조건
에디터 로딩 중...
규칙: WHERE 절이나 MATCH 패턴에 자주 쓰는 속성은 무조건 인덱스.
우리 프로젝트 권장 패턴
에디터 로딩 중...
핵심 포인트
- • 관계의 속성 vs Reification: 부가 정보 많으면 사건을 노드로
- • 시간 트리(Time Tree) 패턴은 시계열 쿼리 성능을 극대화
- • 안티 패턴 회피: 슈퍼노드, 문자열 관계 타입, 라벨 남발
- • 인덱스/제약은 처음부터 설계 — 나중에 추가하면 데이터 마이그레이션 비용 발생