728x90
반응형
해당 내용은 https://neo4j.com/graphacademy/online-training/ 사이트를 참조하여 작성하였습니다.
neo4j
기초
Neo4j의 Grah구성
Nodes
- Vertex
- Object와 entities를 표현한다.
- Node는 반드시 Labels와 Properties를 가질 필요는 없지만, 실제로 구현해 보면 최소 하나씩의 label과 properties를 갖게 될 것이다.
- Vertex
Labels
- Label은 정보를 카테고리화해준다.
- 예를 들어 이 곳에서 Node는 두개의 Person과 한개의 Car로 category화 되어 있다.
- 그리고 여기서 labels는 Node를 분류할 수 있도록 해 주었지만, 특정한 정보를 제공하지는 않고 있다.
- 예를 들어 이 곳에서 Node는 두개의 Person과 한개의 Car로 category화 되어 있다.
- Label은 정보를 카테고리화해준다.
Properties
- Nodes의 특정 정보를 제공한다.
- 특정 정보를 각각의 노드에 연관시켜줄 때에 Properties를 사용한다.
- Person Nodes들은 name이라는 properties를 갖는다. 각각은 Dan, Ann이다. 이 name property는 노드를 분류할 수 있도록 한다.
- Nodes의 특정 정보를 제공한다.
Relationships
Edge
Type, direction을 가져야 한다. properties를 가질 수 있다.
- Types은 Labels와 비슷하게, 각각의 관계를 카테고리화해준다.
- DRIVERS, OWNS, LOVES와 같이 어떻게 relationships가 두 nodes를 연관시키는지에 관한 부분이다.
- directions는 방향이다. Ann이 Dan을 Loves한다. 와 같이 방향을 정의한다.
- Dan이 Volvo의 Car를 2018년부터 DRIVES해왔다. 처럼 properties를 정의해 줄 수도 있다.
- Types은 Labels와 비슷하게, 각각의 관계를 카테고리화해준다.
Traversing
그래프에서 매우 중요한 개념 중 하나는 "Traversal" 즉 순회이다.
node와 relationship사이의 chain이다.
- Traversal가 이루어지는 3가지 다른 방법은 다음과 같다.
- Walk
- Nodes와 Relationships의 정돈되고 교대인 sequence이다.
- 모든 Node와 Relation을 여러 번 방문할 수 있다.
- walk는 traversal의 가장 기본적인 타입이다.
- 1 - 2 - 3 - 2 - 6 - 2 ...
- 2 - 3사이에는 1개의 관계밖에 없지만, walk에서는 몇 번이든 상관없이 사용 가능하다.
- Nodes와 Relationships의 정돈되고 교대인 sequence이다.
- Trail
- Trail은 Node는 여러 번 방문 가능하나, Relationship은 한 번 밖에 방문할 수 없다.
- 2 - 6사이에는 두개의 relationship이 있기 때문에 왕복 가능하나, 2 - 3은 관계가 하나뿐이라 반복 방문이 불가하다.
- Path
- 모든 항목이 고유하다.
- Node, Relationship 모두 반복되지 않는다.
- 모든 항목이 고유하다.
- Walk
Graph DB란
- Graph Data model에서 CRUD작업을 수행하는 DBMS이다.
- OLTP(Online Transaction Processing)시스템의 일부.
- OLTP란 데이터 갱신 위주로 네트워크 상의 여러 이용자가 실시간으로 DB의 데이터를 갱신하거나 조회하는 등의 단위작업을 뜻한다.
- OLAP(Online Analytic Processing)데이터 조회위주는 정보 위주의 처리 분석을 의미하며 의사결정에 활용할 수 있는 정보를 얻을 수 있게 해 주는 기술이다.
- GraphDB는 OLTP시스템의 일부이기 때문에 트랜잭션 성능에 최적화되고, 이의 무결성과 가용성을 고려하여 설계된다.
- GraphDB는 ralationship을 가장 중요시한다.
- 외래키/MapReduce같은 방법을 사용하여 데이터 연결을 유추할 필요가 없다.
- Nodes와 Relationship을 추상화하여 조합함으로서 data model구축
Neo4j DBMS
IFA : Index-free adjacency(Index-free 인접)
기존 RDBMS와 Neo4j Graph DB와의 기능 차이중 하나는 Index-Free adjacency이다.
GraphDB에서는 Node와 Relationship을 서로 연결된 Object로 저장한다.
즉 이런 Graph를
이렇게 저장시킨다.
Cypher쿼리가 다음과 같다면
MATCH (n) <-- (:Group) <-- (:Group) <-- (:Group {id: 3})
RETURN n.id
- id: 3인 Node를 찾는다. 이는 Other Group의 3번 node이다.
- 해당 노드에 연결된 링크를 이용하여 순회를 시작한다. CHILD_OF가 6인 링크를 방문하고, 이는 2와 연결되어 있다.
- ID가 2인 Node를 찾아, 다시 연결된 링크를 확인한다.
- 5번 링크
- 1번 Node를 찾는다. 그리고 이와 연결된 링크를 확인했을때, 1번 Node밖에 없다.
- 그 1번 Node의 I를 Return한다.
해당 쿼리의 수행을 위해, Neo4j쿼리 엔진은
- 특정 anchor에 맞추어 쿼리를 계획해야 한다.
- anchor node를 찾기 위해 index를 사용해야 한다.
- 포인터를 따라 요구하는 result node를 검색한다.
IFA를 사용하면 - index조회나 table scan의 양이 매우 적어진다.
- Foeign Key의 중복을 줄일 수 있다.
Graph engine
Neo4j Graph engine은 Cypher을 해석 할 때에
- kernel-level code를 수행함으로서 최적의 퍼포먼스를 실행한다.
- 디스크와 메모리에 캐시된 데이터 액세스를 최적화한다.
그래프 엔진을 통해 애플리케이션의 그래프 데이터에 효율적 access 제공 가능.
여러 방법을 통해 엔진의 성능을 조정 가능하다.
ACID 트랜잭션
- Atomicity
- 모든 작업을 수행하거나, 아무것도 수행하지 않도록 한다.
- 0/1은 있어도 0.5는 없게
- Consistency
- 트랜잭션에 있어 일관성을 유지하도록 한다.
- Integer타입에 String이 저장되거나 하는걸 막는 것 보장.
- Isolation
- 하나의 트랜잭션 수행 중 다른 트랜잭션의 연산이 수행되지 못하도록 유지한다.
- Durability
- 한번 commit을 하게 되면, 어떤 경우에도 commit이 유지되도록 한다.
- commit후 시스템 에러가 발생된다고 해도 나중에 로그를 판독하여 commit이 반영되도록.
클러스터
Neo4j는 클러스터링을 제공한다.
또, Neo4j는 모든 위치에서 ACID트랜잭션을 유지하고, 관리한다.
Neo4j클러스터는 Neo4j Enterprise Edition에서만 사용 가능하다.
- 클러스터링
- 하나의 DB를 여러개의 서버에 구축하는 것이다.
- 이를 통해 하나의 서버에 비해 얻을 수 있는 이점은
- Tracnsactional(고가용성)
- 하나의 서버가 문제가 발생했을 경우, 다른 서버를 통해 바로 해당 역할을 수행해 줄 수 있다.
- Analytic(병렬처리)
- DB의 분석하는 데에 특화된 어플리케이션을 사용하는 경우(대상의 데이터량이 너무 많고, SQL이 복잡한 경우) 여러 DB상에서 분석하고, 통합하여 처리할 수 있다.
- Online(성능 향상)
- DB사용 유저가 너무 많은 경우 참조 처리의 경우 복사된 DB에서 처리하게 하여 한 DB에 사람이 몰리는 경우를 방지 가능하다.
- Tracnsactional(고가용성)
반응형