Graph Database - neo4j
일반적인 관계형 데이터베이스에서 Entity 사이의 관계를 표현할 때 JOIN 함수를 사용한다. 그런데 JOIN 함수를 사용하는 작업은 성능상에 단점이 있을 뿐만 아니라다소 엄격한 스키마를 따라야해 유연하지 못하다. 그래서 일반적인 SQL 데이터베이스는 관계형 데이터베이스임에도 불구하고 관계를 잘 표현하지 못하는 단점이 있다. 이런 문제점을 해결하고자 Graph 데이터베이스에서는 데이터를 더 유연하게 저장하는 방법을 제공한다. JOIN 과 같은 작업은 존재하지 않으며 모든 데이터는 Node와 Relation으로 표현되고 탐색(traverse)에 최적화됐다.
Neo4J
Neo4J는 오픈소스로 운영되는 Graph Database 이며 ACID compliant 하다. AuraDB 를 이용해 제공되고 있어 체험버전 사용이 가능하다. Native Graph Database 인데 이 말은 곧 데이터를 Graph 형태로 추상화해서 보여주는 것이 아니라 스토리지 상에 저장되는 데이터까지 Graph 모델을 따른 다는 것을 의미한다. 이런 특징 덕분에 Neo4J는 다른 데이터베이스보다 탐색에 있어서 우수한 성능을 보여준다.
Graph Modeling
Graph Modeling 은 Whiteboard Friendly 라고도 불리는데 칠판에 그려둔 엔티티간의 관계를 그대로 데이터베이스상에 접목 시킬 수 있다는 뜻이다.
위의 그림처럼 칠판상으로 표현한 배우들 간의 관계를 Graph Database 상에서 그대로 표현이 가능하다. 그림 3을 이루는 객체는 크게 Node, Label, Relation 으로 구분 할 수 있다.
Two people, John and Sally, are friends. Both John and Sally have read the book, Graph Databases.
Node
Graph를 이루는 기초적인 단위다. Entity를 뜻하며 내부적으로는 name-value의 속성 데이터를 갖고 있다. 앞의 문장에선 John, Sally, Graph Database가 이에 해당한다. 객체지향프로그래밍에선 메모리를 할당 받은 객체로 보면 좋을 것 같다.
Label
Node의 집합을 뜻한다. 모든 Node는 개별 Label이 존재하며 데이터베이스는 Label을 가로 질러서 쿼리를 할 수 있다. Node 보다 추상화된 명사로 칭할 수 있다. 앞선 문장에서는 People, Book 이 Label에 해당한다.
Relation
두 개의 노드 간의 관계를 나타낸다. 관계는 시작 노드와 종료 노드가 있어 관계의 방향을 정해줄 수 있다. 앞선 문장에서 are friends, have read 가 관계에 해당한다.
Neo4J 에서는 끊어지는 연결이 존재하지 말아야 하는 규칙이 있다. 그래서 존재하지 않는 노드에 연결하려고 해선 안된다. 또한 연관 관계를 삭제하기 전에 노드를 먼저 삭제해서도 안된다.
Properties
노드나 관계에 저장하고 싶은 데이터를 key-value의 형태로 저장할 수 있다. 대부분 표준화된 데이터 타입을 사용할 수 있다.
종합하면 위와 같이 표현이 가능하다