Graph Database의 필요성
기존에 우리가 사용하는 관계형 데이터 베이스는 객체간의 관계를 join을 통해 표현을 하곤했다. 하지만 관계의 수와 유형이 늘어나면 늘어날 수록 join은 관계들을 효과적으로 처리하지 못하게 된다. 이는 SNS를 생각하면 쉽게 이해가 되는데 우리가 LinkedIn에서 특정인의 follow수를 counting하고자 한다면 회원 정보의 테이블과 팔로우-팔로잉 관계를 나타내는 테이블을 조인하여 우리가 원하는 특정인의 팔로우 목록을 긁어오거나 저 두 단계를 순차적으로 처리해야할 것이다. 아무리 빨라도 불필요한 연산이 들어가 연산의 속도가 느려짐은 명백하다. 이외에도
- 보다 복잡한 계층적인 관계를 표현해야한다
- 관계성이 보이지 않는 객체들 사이의 관계를 파악해야한다.
- 상호작용하는 객체들의 관계를 보다 면밀히 파악해야한다.
같은 요구사항이 필요했고 이 때문에 그래프 데이터베이스가 출현하게 되었다.
그래프 데이터베이스 용어 정의
그래프 데이터베이스의 객체들은 크게 Node랑 Relationship으로 구성되어있다.
Node
Graph DB상에서 Entity에 해당하는 것들이며 다음과 같은 특징을 가진다.
- 노드들이 domain내에서 다른 역할을 수행한다면 다른 라벨을 태깅함으로써 이를 명시하게 된다.
- 노드들이 가지는 property는 key-value pair쌍으로 구성되어있으며 NoSQL처럼 이에 대한 제한은 존재하지 않는다.
- 노드 라벨을 통해 특정 노드에 대한 메타데이터(예: 인덱스, 제약사항)를 추가할 수있다.
Relationship
두 Entity사이에 방향성이 있고 명명이 가능한 관계를 의미하고 다음과 같은 특징을 가진다.
- Relationship은 항상 관계, type, 시작-끝 노드를 가지며 노드와 같이 key-value쌍의 property를 가질 수 있다.
- Node들이 가지는 relation의 수가 증가한다고 탐색등에 performance저하를 가져오지 않는다.(이거는 조금 의문이 드는 내용이다. memory증가는 cache활용성을 저하시킬텐데 말이다..)
- 방향성을 가진다고 해도 end point에서 relation을 통해 start point를 찾을 수 있다.
관계형 데이터베이스 vs 그래프 데이터베이스
다음은 기존의 관계형 데이터 베이스와 그래프 데이터베이스의 차이를 정리한 표이다.
관계형 데이터베이스 | 그래프 데이터베이스 |
Join은 질의할떄 계산된다. | 관계는 생성될 때 디스크에 저장된다 |
스키마를 정의한 후 최소로 변경한다. | 스키마는 애플리케이션과 함께 진화한다. |
모델링할 때 추상화, 객체보다는 클래스에 초점 | 모델링할 때 실제 데이터 항목을 사용함 |
스키마를 유동적으로 변경하면서 관계를 형성해나간다는 점이 상상이 안 간다. 아무래도 데이터가 실제 노드와 관계를 통해 저장이 되기 때문에 스키마를 확정지을 수 없는 것이 이유인것 같지만 실제 적용에 있어서 디비를 어떻게 구축하게 되는지 궁금해진다.
출처
https://neo4j.com/developer/graph-database/
긴 글 읽어주셔서 감사합니다.
틀린 부분이 있으면 댓글을 달아주시면 감사하겠습니다.
📧 : realhwan1202@gmailc.om
'개발 > Neo4j' 카테고리의 다른 글
[Neo4j] Neo4j의 메모리 구성 (0) | 2023.05.06 |
---|---|
[Neo4j] Cypher Query - (1) (1) | 2023.05.04 |
[Neo4j] Neo4j Docker Compose (0) | 2023.05.03 |