본문 바로가기
GDB & Cypher/기본 개념

GDB란?

by 열정주니어 2023. 1. 2.
반응형

GDB란?

Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자.

 

GDB는 Graph Database의 약자로 위키피디아에서

"데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨틱 쿼리에 그래프 구조를 사용하는 데이터베이스"라고 설명한다. (출처: https://en.wikipedia.org/wiki/Graph_database)

 

쉽게 말하자면 노드와 엣지(노드 간의 관계)로 표현한 그래프의 형태로 데이터를 저장하고 관리하는 데이터베이스이며

보통 객체에 대한 정보를 노드에 저장하고, 객체 간의 관계를 엣지에 저장하게 된다.

이해를 돕기 위해 일상생활에서의 대표적인 관계, 소셜네트워크(sns)를 이용하여 간단한 예시를 들어보자.

 

sns에는 다음과 같은 정보들이 존재한다.

  • 사용자 김OO은 성별은 남자이며 나이는 27, 거주지는 서울이다.
  • 사용자 이OO은 성별은 여자이며 나이는 22, 거주지는 인천이다.
  • 사용자 박OO은 성별은 여자이며 나이는 30, 거주지는 부산이다.
  • 김OO은 이OO을 팔로우하며 게시글에 남긴 좋아요 수는 3개, 댓글수는 5개이다.
  • 이OO 또한 김OO을 팔로우하며 게시글에 남긴 좋아요 수는 2개, 댓글수는 5개이다.
  • 박OO은 이OO을 팔로우하며 게시글에 남긴 좋아요 수는 0개, 댓글수는 1개이다.

위의 정보를 테이블 형태로 나타내면 다음과 같다.

<사용자 정보>
<팔로우 정보>

위의 테이블 정보는 RDB(Relational Database), 관계형 데이터베이스의 형태와 같다.

여기서 객체 정보인 사용자 정보가 노드의 정보가 되고 객체 간의 관계 정보인 팔로우 정보가 엣지의 정보가 된다.

사용자 정보 -> 노드 정보
팔로우 정보 -> 엣지 정보

 

노드와 엣지의 Label(레이블), Property(속성)

GDB가 무엇인지 알았으니 다음으로 노드와 엣지의 레이블, 속성에 대해 간단히 알아보자.

 

Label(레이블)

레이블은 유사한 객체끼리의 묶음을 표현하는 단위이다. 사람, 동물, 사물 등과 같이 각 객체를 공통으로 정의할 수 있는 레이블 명을 이용하여 표현한다.

위의 예시에서 각 객체인 노드들은 sns 사용자라는 공통의 속성을 가진다. 따라서, 위의 그래프에서 노드의 레이블은

'사용자'라고 정의할 수 있다.

 

다음으로 객체 간의 관계 엣지들은 팔로우 관계라는 공통의 속성을 가진다. 따라서, 엣지의 레이블은 '팔로우'라고 정의할 수 있다.

 

이와 같이 레이블을 이용해서 노드나 엣지의 역할이나 타입을 정의할 수 있다.

 

Property(속성)

레이블을 정의했으니 다음으로 속성에대해 알아본다.

 

속성은 정보(데이터)이다. 객체인 노드, 객체 간의 관계인 엣지는 각각의 정보를 가질 수 있다.

위의 노드들중 첫 번째 노드(객체)는 이름이 김OO, 성별이 남자, 나이가 27, 거주지가 서울이라는 객체의 정보(데이터)를 갖는다. 이러한 이름, 성별, 나이, 거주지와 같은 정보(데이터)를 속성이 된다.

 

마찬가지로 엣지에서는 좋아요, 댓글 수와 같은 정보(데이터)가 속성이 된다.

 

이와 같이 속성을 이용하여 노드와 엣지에 각각의 정보를 부여한다.

 

예제

이해를 돕기위해 간단한 예시를 추가해 보자.

위의 sns 사용자 중 이름이 "이OO"인 사용자가 인플루언서이고 광고사로부터 광고를 받는다고 가정해 보자.

 

이를 위해 다음과 같은 광고사와 광고 계약과 관련된 정보를 추가한다.

  • 광고사 '회사 A'는 화장품 제품을 보유하고 제품명은 OO수분크림이다.
  • 광고사 '회사 B'는 전자기기 제품을 보유하고 제품명은 OO이어폰이다.
  • 광고사 '회사 A'는 인플루언서 sns 사용자 '이OO'에게 광고비 30만원을 주고 광고계약을 했다.
  • 광고사 '회사 B'는 인플루언서 sns 사용자 '이OO'에게 광고비 50만원을 주고 광고계약을 했다.

 

추가한 정보를 포함하여 RDB와 GDB로 나타낸 결과는 다음과 같다.

여기서 광고사 정보 테이블은 광고사라는 레이블을 가지는 노드가 되고 광고계약 정보 테이블은 광고계약이라는 레이블의 엣지가 된다.

 

이와 같이 레이블은 여러 개가 존재할 수 있으며 레이블 안의 속성 정보(데이터)는 다르게 들어갈 수 있다는 것을 알 수 있다.

 

GDB의 특징

그렇다면 GDB는 왜 사용해야 하며 어떤 장점을 가지고, 어떠한 상황에 사용해야 하는 것일까?

이를 GDB의 특징을 통해 알아보도록 한다.

 

특징 1. GDB는 직관적이다.

RDB테이블을 봤을 때는 각 객체 간의 관계를 한눈에 파악하기 쉽지 않다. 예시에서는 데이터가 많지 않아 이러한 점이 덜해 보일 수 있지만 데이터가 많아지면 많아질수록 이러한 점은 더 심해질 것이다.

 

반면에, GDB로 데이터를 표현했을 때는 객체 간의 관계를 직관적으로 보고 파악할 수 있다.

 

특징 2.  GDB는 유연하다.

RDB 같은 경우에는 원래의 테이블에서 새로운 속성(컬럼)을 추가하는 것이 굉장히 복잡하다는 특징을 갖고 있다.

사용자 정보 속성 추가

반면 GDB는 다른 속성을 가진 데이터가 추가되어도 각각의 노드가 별개의 객체이기 때문에 속성의 추가가 매우 자유롭다.

GDB에서의 속성 추가

특징3. 관계를 탐색할 때 조회가 빠르다.

RDB는 검색하는 관계의 depth가 깊어지고 복잡할수록, 데이터가 많아질수록 join연산이 많아져 조회의 시간이 느려지는 특징을 갖고 있다.

 

반면 GDB는 join 연산이 없어 관계의 depth가 깊어지고 복잡해도 조회의 시간이 매우 빠르다.

위와 같이 회사B에서 사용자 김OO까지의 관계를 조회할 때 RDB는 여러 번의 join을 거쳐야 하는 반면 GDB는 바로 엣지를 통해 탐색할 수 있어 더 빠르다.

 

이는 데이터가 많아지고 관계가 복잡해질수록 조회 시간의 차이가 기하급수적으로 늘어나게 된다.

 

결론

이와 같이 GDB는 관계 정보(데이터)를 표현하고 저장하고 조회를 하는 것에 큰 강점을 두고 있다.

 

세상은 점점 데이터가 방대해지고 데이터들 간의 관계가 복잡해지고 있다. 이러한 점에서 GDB는 어떻게 사용하는지에 따라 앞으로 큰 강점을 가질 수 있다고 생각한다.

 

반응형

'GDB & Cypher > 기본 개념' 카테고리의 다른 글

[Cypher] Cypher란?  (0) 2023.01.03