[Neo4j 기초] 그래프 DB 모델링 - 노드/관계 생성

2023. 2. 9. 07:25· 데이터베이스 Database/그래프DB_Neo4j
반응형

Neo4j 그래프아카데미의 'Graph Data Modeling Fundamentals'의 내용을 정리한 내용입니다.


 

 
 

관계 모델링

절차

  1. 좋은 이름 짓기
  2. 관계 생성
    • 관계명, 방향이 선언되어야 한다
    • 방향 Direction
      • 관계는 통상적으로 2개 노드 사이에 형성됨
      • (재귀적) 그러나 하나의 노드에도 형성할 수 있음
    • 속성 Properties
 

노드/관계 생성

MERGE (:Label) - [:RELATION] - (:Label)

//alias 선언
MATCH (sandy:User {name: 'Sandy Jones'}) 
MATCH (sleep:Movie {title: 'Sleepless in Seattle'}) 
//관계 생성
MERGE (sandy)-[:RATED {rating:4}]->(sleep) 

위 문장과 동일한 문장

MERGE (:User {name: 'Sandy Jones'})-[:RATED {rating:5}]->(:Movie {title: 'Sleepless in Seattle'})
 

테스트

count(*)

Apollo 13 영화를 평가한 유저의 수 

MATCH (u:User)-[:RATED]-(m:Movie) 
WHERE m.title = 'Apollo 13' 
RETURN count(*) AS Number of reviewers

//위와 동일
MATCH (u:User)-[r:RATED]-(m:Movie) 
WHERE m.title = 'Apollo 13' 
RETURN count(r) AS Number of reviewers

 

Order by, Limit

최고령 찾기

MATCH (p:Person)-[:ACTED_IN]-(m:Movie)
WHERE m.title = 'Hoffa'
RETURN  p.name AS Actor, p.born as Year Born ORDER BY p.born DESC LIMIT 1
 

리팩토링

  • 데이터 모델 및 그래프 수정 절차
    • TO-BE 데이터 모델 설계
    • AS-IS 그래프 수정을 위한 Cypher 코드 작성
    • 유스케이스 리테스트 및 Cypher 코드 업데이트
  • 목적
    • 모델링 목적은 쿼리가 탐색하는 그래프의 사이즈를 최소화하는 데 있음
  • 고려사항
    • 레이블을 과용해서는 안 됨
    • 속성 사용이 Cypher 코드를 더 유연하게함
    • 속성 사용만으로 노드 구성이 충하다면 레이블 추가를 하지 않는 것이 유리함
    • Neo4j는 노드당 4개까지의 레이블을 최적으로 제시함
 

실행순서

PROFILE

  • 쿼리를 실행하면서 실행 순서 및 오퍼레이터별 일량을 체크하고 싶을 때 사용
    • 각 오퍼레이터가 몇 개의 로우를 통과하는지
    • 각 오퍼레이터가 필요한 데이터 탐색을 위해 스토리지 계층과 얼마나 interact하는지
    • 리소스를 더 많이 사용함
PROFILE MATCH (p:Person)-[:ACTED_IN]-() 
WHERE p.born < '1950' 
RETURN p.name**
  1. NodeByLabelScan (p:Person)
    • 이때, Person labeled nodes가 많으면 속도가 저하될 수 있다.
    • 따라서, 탐색 레이블 범위가 줄도록 리팩토링을 고려할 수 있다.
  2. Filter p.born < '1950'
  3. Expand -[:ACTED_IN]->
  4. Projection
  5. Produce Results RETURN
 

EXPLAIN

  • 실제 수행은 하지 않고 실행계획만 확인하고 싶을 때 사용
  • EXPLAIN 구문을 실행하는 경우, 쿼리는 항상 빈 결과값을 리턴하며, 데이터베이스에 변화를 가하지 않음
 

리팩토링

위 예시에서 Person 노드들 중에서 연기자(Movie 노드들과 ACTED_IN 관계가 있는)만 따로 탐색을 자주 한다면, Actor label을 추가할 수 있다.

 

Label 추가

SET n:Label

MATCH (p:Person) 
WHERE exists ((p)-[:ACTED_IN]-()) 
SET p:Actor
 

Labeling 주의점

  • “Semantically orthogonal” 의미상 직교
    • 레이블은 다른 레이블과 영향을 주지 않아야 함
    • 같은 종류의 레이블을 다른 상황에서 사용하지 않도록 주의해야 함 contexts
  • “inheritance” or “IS-A” 관계
    • 노드들이 여러 레이블을 가지고 있으면서 서로 상하관계가 있도록 해서는 안됨
    • 상하관계가 있을 때 라벨 모델링 예시

<구조>

https://graphacademy.neo4j.com/courses/modeling-fundamentals/

<그래프 모델링 예시>

 

https://graphacademy.neo4j.com/courses/modeling-fundamentals/


 

참고자료: Neo4j 그래프아카데미, Graph Data Modeling Fundamentals

https://graphacademy.neo4j.com/courses/modeling-fundamentals/

반응형
저작자표시 비영리 변경금지 (새창열림)

'데이터베이스 Database > 그래프DB_Neo4j' 카테고리의 다른 글

[Neo4j 기초] CSV 파일 임포트해오기  (1) 2023.02.21
[Neo4j 기초] 그래프 DB 모델링 - 중복 데이터 생성/삭제  (2) 2023.02.14
[Neo4j] 기본적인 표기법과 기초 함수 (노드, 관계, MERGE, CREATE, DELETE, SET)  (0) 2023.02.06
'데이터베이스 Database/그래프DB_Neo4j' 카테고리의 다른 글
  • [Neo4j 기초] CSV 파일 임포트해오기
  • [Neo4j 기초] 그래프 DB 모델링 - 중복 데이터 생성/삭제
  • [Neo4j] 기본적인 표기법과 기초 함수 (노드, 관계, MERGE, CREATE, DELETE, SET)
H 에이치
H 에이치
산만과 꾸준이 공존할 수 있다면 혼란해도 괜찮겠다 싶습니다.
H 에이치
H's Blog
H 에이치
  • 분류 전체보기 (102)
    • 데이터베이스 Database (17)
      • 그래프DB_Neo4j (4)
      • RDBMS_Oracle (8)
      • 프로젝트 Project (3)
    • 지식 정보 Knowledge (18)
      • 컴퓨터 Tips (7)
      • 업무 공부 Studies (6)
      • 일상 Daily Life (5)
    • 취미생활 Hobby (35)
      • 책 Book (6)
      • 운동 Workout (20)
      • 공연 전시 Exhibition (5)
      • 언어 Language (4)
    • Random Things (3)
    • 서울 Seoul (25)
      • 식당 Restaurant (16)
      • 술과 커피 Bar & Cafe (9)
    • 경기 고양 Goyang (3)
      • 식당 Restaurant (3)
      • 술과 커피 Bar & Cafe (0)
반응형
전체
오늘
어제

인기 글

hELLO · Designed By 정상우.v4.2.2
H 에이치
[Neo4j 기초] 그래프 DB 모델링 - 노드/관계 생성
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.