Clean Code that Works.

그래프 데이터베이스와 Neo4j

그래프 데이터 베이스와 Neo4j에 대해서는 아래의 그림 한장으로 설명 될 수 있습니다.
차분히 읽어 보면 개념 자체는 어렵지 않습니다. ㅎㅎ

아래 동영상은 Neo4j의 공동 설립자인 Emil Eifrem이 설명하는 그래프 데이터베이스입니다.


그럼 본론으로 들어가서..
아래 내용들은 Neo4j.org 에 있는 글들을 번역한 것입니다.
되게 어렵게 설명해서 발번역이 됬네요. ㅋ
직접들어가서 한번 보는것도 추천 드립니다.


그래프 데이터베이스란 무엇인가?

그래프 데이터베이스는 데이터를 그래프에 저장하고 데이터의 구조가 가장 일반적이고, 우아하고 높은 접근 방식으로 모든 데이터를 표현할 수 있다.

그래프에 대해 설명하는 몇가지 그래프들을 보도록 하자. 다이어그램 주위의 화살표를 따라 읽으면 문장을 형성해서 그래프를 읽을 수 있다.

그래프는 Nodes 와 Relationships 을 가지고 있다.

A Graph-[:RECORDS_DATA_IN]->Nodes-[:WHICH_HAVE]->Properties.
가장 심플한 그래프는 한개의 노드로 표현할 수 있다. 프로퍼티라는 값으로 정의 될 수 있다.
약간 평범하지 않은 이야기이긴 하지만 노드는 한개의 속성을 가지고 시작해서 몇 백만개까지 증가할 수 있다. 
이렇게 하는 것 보다는 명시적인 관계로 조직된 다수의 노드로 나누는게 좋다.

위 그래프를 화살표를 따라 읽으면 

A Graph는 Nodes 와 Relationships으로 기록 되고, 각각 Node들은 Relationship으로 조직될 수 있다. 
또 Nodes와 Relationships 은 각각 별도로 속성을 가질 수도 있다.


순회를 통해 그래프에 조회 하기

A Traversal - navigates -> a Graph; it - identifies -> Paths - which order -> Nodes.

순회는 그래프에 어떻게 질문을 하는가 라고 말할 수 있다.
알고리즘에 따라 시작 노드 부터 관계가 있는 노드까지 탐색하고, 아래와 같은 질문에 대한 답을 찾을 수 있다. 
"내 친구가 좋아 하는 음악중에 내가 가지고 있지  않은것은 무엇인가?"
"만약 이 파워 서플라이가 다운되면 웹 서비스에 끼치는 영향은 무엇인가?"



노드와 관계에 대한 인덱스.

An Index - maps from -> Properties - to either -> Nodes or Relationships. It - is a special -> Traversal

가끔 특정 노드나 관계에 저장된 속성들에 대해 찾아야할 때가 있다. 
"Account 중에서 사용자 이름이 '그래프 마스터'인 것에 대해 찾아라" 같은 순회 방식은 가장 일반적인 방식으로 인덱스 룩업에 최적화 되어 있다. 

Neo4J란 무엇인?

Neo4j는그래프 데이터베이스로 신뢰할 수 있고 끈끈하게 연결된 데이터들에 대해 빠르게 관리 및 조회할 수 있다.
Neo4j 는 오픈소스 그래프데이터베이스로 Neo Technology에서 제공한다.
Neo4j 속성들과 함께 다양한 관계들과 연결된 노드들을 직접 저장한다.

주요 특징

  • 직관적 : 데이터를 표현하기 위해 그래프 모델을 사용

  • 믿을수 있는 : FULL ACID 트랜잭션을 제공

  • 빠르고 안전한 : 커스텀 디스크와 네이티브 스토리지 엔진 

  • 대규모 확장 : 수십억개의 노드/관계/속성

  • 고 가용성 : 다양한 머신에 분산

  • 사람이 읽기 편한 그래프 

  • 쿼리 

  • 빠른 속도의 그래프 쿼리를 통산 빠른 검색 속도

  • 몇개의 작은 jar 파일들로 서버 세팅 가능

  • 간편 함 : REST interface를 통한 API 제공 및 OOP한 Java API 제공