이번에 더 배울 것
버전 기록, 이벤트 로그, 장(chapter)처럼 순서가 중요한 항목은 (v1)-[:NEXT]->(v2)-[:NEXT]->(v3)처럼 잇습니다. 목록의 머리 노드에서 첫 항목과 최신 항목을 가리키는 [:FIRST], [:LATEST] 관계를 두면 양 끝에 바로 갈 수 있습니다. Neo4j 모델링 안내서는 다음 관계 하나로 이전 관계를 알 수 있으므로, NEXT와 PREV를 모두 두는 이중 연결은 중복이라 권하지 않습니다.
새 항목을 붙일 때는 이전 최신 항목에서 NEXT를 하나 잇고 LATEST를 새 항목으로 옮깁니다. 최신 항목은 LATEST로 한 홉이지만 n번째 항목은 FIRST에서 n−1홉을 가야 합니다. 그래서 ‘최근 것 몇 개’를 자주 묻는 목록에 잘 맞고, 임의 위치를 자주 묻는다면 순번 속성과 인덱스가 낫습니다.
타임트리는 시간을 (:Year {value:2024})-[:HAS_MONTH]->(:Month {value:3})-[:HAS_DAY]->(:Day {value:5}) 같은 계층으로 만들고 사건을 날짜 노드에 잇는 패턴입니다. 월 단위로 훑거나 날짜 노드에 집계를 붙이기 좋지만, 노드 수가 늘고 바쁜 날짜 노드는 허브가 될 수 있습니다. 대부분의 기간 질의는 date 속성과 범위 인덱스로 더 간단히 해결되므로, 계층 탐색이 정말 필요할 때 고릅니다.
작은 예제로 따라가기
논문 초안 v1→v2→v3에서 세 번째 버전은 FIRST에서 2홉, 최신 버전은 LATEST로 1홉입니다.
v4를 붙이면 LATEST 삭제 1번, LATEST 생성 1번, NEXT 생성 1번으로 관계 변경이 3번입니다.
2024년 3월 행사는 타임트리에서 Year 2024 → Month 3 → Day 노드들 → 행사 순으로 찾고, date 속성 방식에서는 WHERE e.date >= date('2024-03-01') AND e.date < date('2024-04-01') 한 줄로 찾습니다.
목록을 어떻게 이을까
버전이 10개인 목록에서 ‘최신 버전’과 ‘세 번째 버전’을 찾는 홉 수를 각 설계마다 먼저 예상하세요.
최신 항목도 처음부터 걸어가야 합니다.
학습을 시작하면 새 문제를 직접 풀고 확인 퀴즈를 마친 뒤 선택한 본과정 회차로 돌아갑니다.