Neo4j는 가장 인기 있는 그래프 데이터베이스 중에 하나입니다상용버전 뿐만이 아니라 오픈소스 버전도 존재합니다. Neo4j는 ‘4j’가 자바 언어(Java Language)로 구현되었음을 의미하며이들 생태계는 기본적으로 JVM(Java Virtual Machine) 기반위에서 동작합니다. Neo4j 클라이언트는 루비(Ruby)와 파이썬(Python)과 같은 다른 언어를 지원합니다


루비(Ruby)

 

루비 프로그래밍 언어는 간결하면서도 표현력이 막강한 객체지향형 스크립트 언어로 마츠모토 유키히로가 1995년에 만들었습니다웹 개발을 위한 오픈 소스 프레임워크인 루비 온 레일즈에 이어서 시스템 관리 부문의 오픈 소스에서도 많이 사용되면서 인기를 끌고 있습니다.

 

루비는 기존에 스크립트 형식의 프로그래밍 언어인 파이썬(Python) 이나 펄(Perl)에 익숙한 개발자이거나 함수형 언어를 이해하는 개발자에게는 이해하기 쉬울지 모르지만 처음으로 스크립트 언어를 배우는 사람이 읽기에는 구성과 설명이 다소 어렵습니다.

 

루비는 인터프리터 형식으로 실행되는 고기능 언어이자 뛰어난 객체 지향적 언어입니다이러한 특성을 가지면서 루비와 같이 가독성이 뛰어난 대표적인 스크립트 언어는 파이썬(Python)입니다.

 

파이썬이 정형화된 들여쓰기를 요구하는 반면 루비는 정형화된 서식을 요구하지는 않습니다사용자 수와 구현 시스템의 수와 질 등을 비교해 보면세계적으로 파이썬이 인기가 더 많습니다루비는 개발자가 일본인이기 때문에 일본에서는 루비의 인기가 높습니다.


 

Neo4J의 특징

    ① JTA(Java Transaction API) 지원

    ② REST(Representational State Transfer) 방식 지원.

    ③ 이중화를 통한 고가용성을 지원(Zookeeper)

    ④ 인덱스(Index) 및 노드 탐색 지원

    ⑤ 백업 / 복구 지원

 

JTA(Java Transaction API) 

자바 트랜잭션 API(Java Transaction API, JTA) XA 리소스(데이터베이스간의 분산 트랜잭션을 처리하는 자바 API입니다하나의 데이터베이스나 여러 개의 데이터베이스에서 발생하는 트랜잭션을 제어하기 위한 목적으로 사용합니다.

 

REST(Representational State Transfer)

월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식(Style)입니다이 용어는 로이 필딩(Roy Fielding) 2000년 박사학위 논문에서 소개되었습니다.

 

REST는 웹 2.0의 패러다임으로 등장했던 Open API을 보다 간단하게 제공하기 위해서 사용되었던 방식입니다발표 당시에는 대규모의 네트워크 시스템을 위한 방법이라는 뜻으로 발표한 것이지만 현재는 HTTP XML을 이용하여 데이터를 주고 받은 웹 서비스를 이용하는 것으로 사용되고 있습니다.

 

다음은 SOAP(Simple Object Access Protocol) 방식과 REST 방식의 웹 서비스를 비교한 그림입니다. SOAP 방식은 복잡한 형태의 메시지 구조를 가지고 있으며데이터를 전송하기 위해서 TCP UDP 같은 네트워크의 전송 프로토콜을 이용합니다. REST 방식은 간단하게 URL을 통해서 서비스를 호출하게 되며, URI를 통해서 다양한 조작이 가능합니다아래의 그림에서 URL은 http://localhost:9002”를 말하며, URI는 “moviewservice/movies/001” 을 의미합니다결과는 XML이나 JSON 형식으로 반환이 됩니다.


[ SOAP 방식과 REST 방식의 비교 ]

 

 

Neo4J의 데이터의 표현

그래프 모델(Graph Model)에서 그래프(Graph)는 정점(Vertex)과 간선(Edge) 그리고 프로퍼티(Property)로 구성이 되어 있습니다이러한 데이터 표현은 관계형 데이터베이스의 객체-관계(Entity-Relationship) 모델과 일치합니다정점(Vertex)은 노드(Node) 의미하며 완전히 동일하지는 않지만 관계형 데이터베이스의 객체(Entity)와 유사합니다간선(Edge)은 관계(Relationship)를 나타냅니다.

 

 

아래의 그림은 그래프를 구성하는 3대요소(노드관계프로퍼티)를 도식화한 것입니다노드(Node)는 정점(Vertex)를 의미하며관계(Relationship)은 간선(Edge)를 의미합니다마지막으로 프로퍼티(Properties)는 노드와 관계에 대한 속성 값을 의미합니다.

 

 

그래프의 구성요소 ]

 

 

Neo4j의 데이터 구조

노드(Node)와 관계(Relationship)은 각각의 데이터 구조를 가지고 있습니다아래의 표는 노드와 관계에 대한 데이터구조를 나타낸 것입니다.

 

노드(Node)

 ID

 식별자

 inUse

 존재하면 ‘1’, 아니면 ‘0’

 nextRelID

 노드에 연결된 첫번째 관계의 식별자

 

관계(Relationship)

 ID

 식별자

 inUse

 존재하면 ‘1’, 아니면 ‘0’

 firstNode

 간선(Edge)의 시작노드(Source node) 식별자

 secondNode

 간선(Edge)의 목적노드(Destination node) 식별자

 firstPrevRelID

 시작노드(Source node)의 이전 관계(Relationship) 식별자

 firstNextRelID

 시작노드(Source node)의 다음 관계(Relationship) 식별자

 secondPrevRelID

 목적노드(Destination node) 이전 관계(Relationship) 식별자

 secondNextRelID

 목적노드(Destination node) 다음 관계(Relationship) 식별자

 

 

아래의 그림은 노드(N1, N2, N3, N4)와 관계(E1, E2, E3, E4, E5)를 그래프로 도식화한 것입니다관계는 두 노드 사이의 연결을 표현하는 것으로 단방향 또는 양향일수 있으며노드로 들어오는 관계인 ‘incoming’ 과 노드에서 나가는 관계인 ‘outgoing’을 가집니다.

 

 

[ Neo4j의 데이터 표현 ]

 

상단의 그래프를 노드와 관계로 표현을 하면 아래처럼 정리할 수 있습니다.

 

 

Neo4j의 활용 분야

소셜 네트워크 서비스는 태생적으로 그래프로 데이터를 표현하기에 적합한 구조를 가지고 있습니다트위터(Twitter)를 보면 글을 게시하는 특정 사용자를 다른 사람이 팔로우(follow)하는 구조를 보면한 노드와 다른 노드와의 관계(Relationship)를 그래프로 표현할 수 있습니다.

 

 

다음 그림은 매트릭스에 나오는 인물들에 대한 관계도를 나타내고 있습니다이러한 구조를 페이스북(Facebook)에서도 이용하고 있으며두 노드간의 관계들을 계속 확장하여 이전에는 몰랐던 새로운 인간 관계를 발견할 수 있습니다또한 인간관계들을 더욱 확장하여 이들 관계에서 가장 영향력을 발휘하는 사용자들을 찾아내어 마케팅에 활용할 수도 있습니다.

 

매트릭스의 인물 관계도 ]

 

 

Neo4j 라이선스(Licenses)

Neo4J 3가지의 라이선스를 가지고 있습니다. ‘Community MySQL처럼 자유롭게 사용할 수 있으며, GPL 라이선스여서 프로그램에 포함하는 경우가 아니라면 소스를 공개할 의무가 없습니다. ‘Advanced는 모니터링과 운영 지원이 포함되어 있습니다이 버전에서는 소스 코드는 무료로 이용이 가능하지만 소스 코드에 대한 수정사항은 커뮤니티의 이익을 우해서 공개되어야 하는 AGPL 라이선스 규정을 준수해야 합니다만약 소스 코드에 대한 공개를 하지 않기 위해서는 상용 라이선스를 구매해야 합니다마지막으로 Enterprise Auto Replication과 전체적인 모니터링을 지원하며 24시간 운영 지원이 포함되어 있습니다.

'빅데이터 > No SQL' 카테고리의 다른 글

NoSQL 7종 비교  (0) 2017.09.10
H베이스(HBase)  (0) 2017.08.04
카산드라(Cassandra)  (0) 2017.08.04
카우치DB(Couch DB)  (0) 2017.08.04
몽고DB(Mongo DB)  (0) 2017.08.04

+ Recent posts