이론 정리/GraphDB

GraphDB - Neo4j의 기초, 정의

철매존 2022. 2. 19. 13:39
728x90

해당 내용은 https://neo4j.com/graphacademy/online-training/ 사이트를 참조하여 작성하였습니다.

neo4j

기초

  • Neo4j의 Grah구성

    • Nodes

      • Vertex
        • Object와 entities를 표현한다.
        • Node는 반드시 Labels와 Properties를 가질 필요는 없지만, 실제로 구현해 보면 최소 하나씩의 label과 properties를 갖게 될 것이다.
    • Labels

      • Label은 정보를 카테고리화해준다.
          • 예를 들어 이 곳에서 Node는 두개의 Person과 한개의 Car로 category화 되어 있다.
            • 그리고 여기서 labels는 Node를 분류할 수 있도록 해 주었지만, 특정한 정보를 제공하지는 않고 있다.
    • Properties

      • Nodes의 특정 정보를 제공한다.
          • 특정 정보를 각각의 노드에 연관시켜줄 때에 Properties를 사용한다.
          • Person Nodes들은 name이라는 properties를 갖는다. 각각은 Dan, Ann이다. 이 name property는 노드를 분류할 수 있도록 한다.
    • Relationships

      • Edge

      • Type, direction을 가져야 한다. properties를 가질 수 있다.

          • Types은 Labels와 비슷하게, 각각의 관계를 카테고리화해준다.
            • DRIVERS, OWNS, LOVES와 같이 어떻게 relationships가 두 nodes를 연관시키는지에 관한 부분이다.
            • directions는 방향이다. Ann이 Dan을 Loves한다. 와 같이 방향을 정의한다.
            • Dan이 Volvo의 Car를 2018년부터 DRIVES해왔다. 처럼 properties를 정의해 줄 수도 있다.

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에서는 몇 번이든 상관없이 사용 가능하다.
    • Trail
      • Trail은 Node는 여러 번 방문 가능하나, Relationship은 한 번 밖에 방문할 수 없다.
      • 2 - 6사이에는 두개의 relationship이 있기 때문에 왕복 가능하나, 2 - 3은 관계가 하나뿐이라 반복 방문이 불가하다.
    • Path
      • 모든 항목이 고유하다.
        • Node, Relationship 모두 반복되지 않는다.

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

  1. id: 3인 Node를 찾는다. 이는 Other Group의 3번 node이다.
  2. 해당 노드에 연결된 링크를 이용하여 순회를 시작한다. CHILD_OF가 6인 링크를 방문하고, 이는 2와 연결되어 있다.
  3. ID가 2인 Node를 찾아, 다시 연결된 링크를 확인한다.
  4. 5번 링크
  5. 1번 Node를 찾는다. 그리고 이와 연결된 링크를 확인했을때, 1번 Node밖에 없다.
  6. 그 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에 사람이 몰리는 경우를 방지 가능하다.