Free Lines Arrow
본문 바로가기
DataBase/Neo4j

[Neo4j] Neo4j 란?

by skahn1215 2024. 3. 29.
728x90
반응형

Neo4j 란?

  • 그래프형 데이터 베이스 이다.
  • 그렇다면 그래프형 DB 란 어떤 것인가?

 

그래프형 DB 란?

노드와 간선(Relations)으로 구성되어 있는 DB 이다.

  • Nodes:
    - Michale, Graph Inc, Sarah 가 노드이다.
  • Relations:
    - WORKS_AT, MARRIED_TO 가 노드들 간 관계이다.

 

 

 

그래프 DB 중 Neo4j 를 써야 되는 이유

속도

  • Neo4j 는 데이터의크기와 관계가 복잡해 져도 선형적인 속도를 보여준다.
  • 관계형 DB 보다 1000 배 빠르게 사용할 수 있다.
  • 병렬로 그래프 그래프 글로벌 쿼리를 사용하여 더 빠르게 분석 할 수 있다.

 

신뢰, 보안

  • ACID 를 준수한다.
  • 수십억 개의 노드와 수조 개의 관계에서도 강력한 트랜잭션 보장과 타의 추종을 불허하는 신뢰성을 제공함.
  • 기본적인 보안 외에도 세분화된 보안가능 개별 적인 접근 제한으로 관계형 데이터 베이스 보다 보안이 뛰어남.
  • 아래 그림 처럼 특정 노드에 접근 제한을 걸 수 있다.

 

 

개발자 친화적

  • 다양한 툴 제공
  • 네이티브 드라이버 제공(Java 제공)
  • 그래픽 툴 제공

 

RDBMS 와 차이점

  • 핵심만 살펴 보겠다.
  • 속도가 빠른 이유를 파악해본다.

Index-free adjacency (IFA)

  • RDBMS 와 다르게 인덱스 없는 인접성을 구성한다.
  • 테이블 스캔이 없다.
  • 인덱스 탐색을 최소화 한다.
  • 데이터 중복을 줄인다.

예제

  • 아래 그룹을 나타내는 테이블이 있다고 하자
  • ID 가 3번인 Other Group 의 최상위 Parent 인  ID 1 을 찾는 쿼리를 예제로 보자.

 

RDBMS

  • 쿼리 구조는 아래와 같다.
SELECT PARENT_ID                     -- ID 1 조회
FROM GROUPS
WHERE ID = (SELECT PARENT_ID         -- ID 2 의 Parent 1 조회 
    FROM GROUPS
    WHERE ID = (SELECT PARENT_ID     -- ID 3 의 Parent 2 조회
        FROM GROUPS
        WHERE ID = 3))

 

동작 과정

  • 1. 최 하위 서브 쿼리로 이동
  • 2. 쿼리 플랜 구축 
  • 3. 쿼리 플랜 실행
  • 4. 다음 하위 서브 쿼리로 이동
  • 2 ~ 4 반복

 

결과

  • 3번의 플랜 구축
  • 3번의 인덱스 조회
  • 3번의 DB 를 읽음

 

Neo4j storage

  • Neo4j는 노드와 관계를 포인터를 통해 서로 연결된 객체로 저장한다.
  • 포인터가 핵심이다. 다음 조회할 주소를 알고 있기 때문에 포인터로 바로 접근이 가능하다.

 

동작 과정

  • 포인터로 접근 한다

1. 6번 CHILD_OF 접근
    - 연결되어 있는 노드가 2번인걸 알수 있다.
2. 2번 노드 접근
    - 6번에서 왔으니 다음 포인터는 5번인걸 알수 있다.
3. 5번 CHILD_OF 접근
    - 2번 노드에서 에서 왔으니 다음 포인터는 1번인걸 알수 있다.
4. 1번 노드 접근
    - 5번 에서 왔으니 다음 포인터는 4번인걸 알 수 있다.
5. 4번 CHILD_OF 접근
    - 1,1 로 연결 되어 있기 때문에 다음 포인터는 1번인걸 알 수 있다.
6. 1번 노드로 이동

 

결과

  • 1. 지정된 앵커 를 기준으로 쿼리를 계획한다.
  • 2. 하나의 인덱스를 사용하여 노드를 조회 한다.
  • 3. 포인터를 따라 원하는 노드를 검색한다.

 

장점

  • 적은 인덱스 조회
  • 테이블 스캔 없음
  • 데이터 중복 최소화

 

사례

  • NASA 에서 Neo4j 를 적용함.
    • 프로젝트 시간 단축, 재해 예방 가능을 목적에 둠
    • 이전에 데이터들을 파악했다면 오작동 재해를 예방할수 있었다고함.
  • NASA 문제점
    1. 접근성
      1. 수십년동안 데이터를 모았지만 부서별, 개인별, 프로젝트 별로 데이터가 나뉘어 접근성에 문제가 있었음.
    2. 속도, 부하
      1. 방대한 데이터 양으로 속도의 문제 부하 문제가 있었음.
  • neo4j 로 문제를 해결함
    • 자료의 주제를 정함 (노드)
    • 자료의 상관관계를 정함 (관계)
    • 주제들이 어떤 관계가 있는지 빠르게 파악하고 자료들을 빠르게 조회 할 수 있게됨.
    • 의사 결정을 향상 시킬수 있었었음
  • 결론
    • 2백만 달러의 예산을 줄일수 있엇음.
    • 빠른 의사결정을 할 수 있었음.
    • 정확한 분석이 가능해 졌음.
728x90
반응형

댓글