본문 바로가기

컴퓨터/Spring + JPA

관계형 db vs 그래프 db에 대한 고민

반응형

신규 프로젝트를 진행하는 도중 db 설계한 내용을 시니어 개발자분께 보여드렸더니, 해당 도메인에 관계형 db를 사용 할 시 성능문제가 발생 할 수 있다는 피드백을 받았고, 그래프 db를 사용하는 것을 검토해보라는 피드백을 받아 내용을 정리해보려고 합니다.

먼저 그래프 db는 관계형 db와 아래와 같은 차이점이 있습니다.

새로운 속성 추가시

  1. 관계형 db 새로운 칼럼을 추가하고, 외래키 등을 이용해 연관관계를 맺어주고 제약조건 등을 설정해주는 과정을 거쳐야한다.
  2. 그래프 db 새로운 노드를 추가하고 다른 데이터와 연결해주는 과정만 거치면 쉽게 속성을 추가 할 수 있다.

처리 속도 관련

  1. 관계형 db 다른 테이블을 join해야 하는 경우가 많을시, depth가 깊어지게 될 시 성능에 대한 부담이 계속해서 증가한다.
  2. 그래프 db 관계형 db와는 해당 레이블을 검색 후, 데이터 관계에 따라 조회를 하기 때문에 데이터양이 방대하더라도 상대적으로 빠른 속도를 보장한다.

직관성

  1. 관계형 db 비개발자의 경우 테이블간의 db구성, 연관관계 등을 파악하는 것이 힘들다.
  2. 그래프 db 그래프 db는 현실을 반영하는 직관적인 데이터 모형을 제공하여 상대적으로 db구성을 한눈에 파악하기 쉽다.

단점 :

  1. rdb에 비하여 레퍼런스 문서의 수가 많이 적다.
  2. vertex 간의 연산이 필요할 경우 적합하지 않음 (ex: 모든 맴버를 출력하라. )

적용 사례 :

  1. 개인 맞춤형 인공지능 학습 서비스 : 나눗셈, 곱셈과 도형의 넓이 구하기 우선순위를 어떻게 결정 할 것인지? 등등 → 그래프db를 활용하여 해결
  2. 소셜네트워크 - 친구 관계
  3. 쇼핑몰 - 상품 구매 패턴, 연관상품을 표현

기타 생각 정리 :

  1. spring 에서 data jpa 와 같이 data neo4j 프로젝트가 있어 spring boot와 사용하는데 큰 불편함은 없을 것 같다.
  2. 하지만 레퍼런스 문서가 많이 없다는 점과 러닝커브가 작지 않다는 점에서 도입하기가 꺼려지는 부분이 있다.

참고자료 : Spring data Neo4j , Neo4j

반응형