GraphDB Neo4j 모델링

soyoung·2022년 12월 15일
0

Neo4j

목록 보기
2/2

올바른 GraphDB 모델링

1. 먼저 query를 생각한다.

사용자는 데이터로부터 무엇을 알고싶은지 '유저 스토리'를 기반으로 시작
예를들어, "내가 일하는 회사의 직원 중 누가 나와 비슷한 기술을 갖고 있고, 지식을 교환할 수 있는지 알고 싶다"

2. 사용 사례를 이용해 관계 정렬하기

질의 기능을 모델링하고 질의가 모델을 결정할 수 있는 방법으로 다양한 사용사례(use cases)에 대해 노드 간에 가질 수 있는 서로 다른 관계 유형을 사용한다.
서로 다른 사용 사례에 대하여 2개의 동일한 노드 사이에 복수의 관계를 사용할 수 있다.
특정 사용 사례를 위하여 두 노드 사이에 특정 관계를 사용하는 것이 모델을 추가시 발생하는 복잡성에 비해 비용이 낮다.

3. 다항 관계 찾기

다항 관계는 특정 개념을 자연스럽고 편리하게 표현하기 위해 하나의 개념을 하나 이상의 개념에 관계를 연결한다.

4. 세밀한 노드 (세밀한 패턴 = granulate pattern)

그래프 모델에서는 적은 수의 속성을 가지고 있는 얇은 노드와 관계를 생성한다. 즉, 노드와 관계는 매우 잘게 쪼개져있고 세분화돼있다.

*비교 : 관계형 모델에서는 데이터베이스 정규화를 사용하여 세분화한다.
관계형 모델은 질의시 테이블 조인이 발생하고, 조인 연산에 비용이 많이든다. 따라서 비정규화 하려는 경향이 있는데, 비정규화 하게되면 데이터 중복문제 발생

  • 모델링 하다보면 속성 자체가 노드가 돼야하나? 속성으로 모델링 해야하나? 고민하게 된다.

이때는 다음과 같이 접근하면된다.

  • 해당 속성이 그래프 탐색 중에 평가할 필요가 없다면, 노드 속성으로 유지하자. 모델을 좀 더 단순하게 유지할 수 있다.
  • 그래프 탐색 중에 해당 속성을 평가 해야한다면, 해당 브랜드를 자신의 노드 범주로 분리하는 것이 있다. 노드를 탐색하는 것이 종종 모든경로에서 각 노드의 속성을 평가하는 것보다 쉽고 빠르다.

5. 필요한 경우 그래프의 색인 기능 사용하기

추가) property vs relationship

올바르지 못한 GraphDB 모델링

1. 풍부한 속성 사용하기

속성을 별도의 노드로 분할한 다음 관계를 사용해 연결하면 훨씬 효율적으로 해결 가능하다.

2. 여러 가지 개념을 나타내는 노드

3. 연결되지 않은 그래프

4. 고밀집 노드 패턴

그래프 순회에서 문제가 생기는 것은 그래프의 일부가 모두 같은 노드에 연결되는 고밀집 노드 또는 슈퍼노드다.

그래프 순회 관점에서 봤을때 많은 관계를 갖고있는 슈퍼 노드는 다음 단계가 무엇인지를 결정하기 위해 그 노드에 연결된 모든 관계를 순서대로 평가해야 하기 때문에 문제가 될 수 있다.

-> fan-out패턴을 적용하여 구성한다. 즉 직접 연결하는 대신 메타노드에 연결한다. 메타 노드는 상호 연결되고 최종적으로 실제 노드와 연결된다.
ex) 아티스트 마돈나에게 fan들이 좋아요를 100개를 연결하는 상황을 모델링해보면 직접 연결하는 대신 메타 노드를 사용하여 연결할 수 있다.

GraphDB 모델링 순서 및 예시

Graph Data Model = Whiteboard-Friendly

1. Matrix - whiteboard model

2. Matrix - match node and relationship format of property graph model

3. Matrix - add labels and properties

4. Matrix - final model in Neo4j


Describing a Domain
To better understand the process of designing a graph data model, let us take an example domain for a small set of data and walk through each step of how to create a graph data model from it.
Consider the following scenario describing our example data entities and connections.
-> Scenario: Two people, Sally and John, are friends. Both John and Sally have read the book, Graph Databases.

Defining Nodes
You can often find nodes for the graph model by identifying nouns in your domain. Entities such as a car, a person, a customer, a company, an asset, and others similar can be defined as nodes for a good starting point.
-> Scenario: Two people, Sally and John, are friends. Both John and Sally have read the book, Graph Databases.

Extracting the nodes:

  • John
  • Sally
  • Graph Databases

Remember that a graph database takes each instance of an entity as a separate node (John and Sally would be two separate nodes, even though they are both people), and Graph Databases would be a separate node from another book.

Defining Labels

0개의 댓글