Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Starting Graph-Database

Buzzvil
September 01, 2021

Starting Graph-Database

By Asher

Buzzvil

September 01, 2021
Tweet

More Decks by Buzzvil

Other Decks in Programming

Transcript

  1. By Asher
    Starting Graph-Database
    For Beginner

    View Slide

  2. 목차
    1. 그래프 데이터베이스 개념
    2. 그래프 데이터베이스 특징
    3. 그래프 VS 관계형 데이터베이스
    4. 그래프 데이터베이스 예시
    5. 그래프 데이터베이스 유스케이스

    View Slide

  3. KNOW
    LIKE
    LIKE
    LIKE
    LIKE
    FAMILY
    MARRIED
    장모님
    BUY BUY
    BUY
    추천
    그래프 데이터베이스 예시

    View Slide

  4. 그래프 란?
    그래프는 개별 데이터를 나타내는 점(Node or Vertex), 객체 간의 관계를 표시하는 선
    (Edge or Relationship)로 이루어져 있습니다.

    View Slide

  5. 그래프 데이터베이스 특징 - 구조
    “A database that uses graph structures for semantic queries with nodes, edges, and properties to
    represent and store data”
    -> 그래프 데이터베이스는 크게 노드와 엣지(관계)로 이루어져 있습니다. 또한 노드와 엣지는 각각의 라벨
    및 프로퍼티를 갖을 수 있습니다.
    Name: ‘Asher’
    Age: ‘2x’
    Company:’Buzzvil
    Lives:{‘Ilsan’}
    CO-Worker :KNOWS
    Name: ‘Zendya’
    Age: ‘2x’
    Company:’Buzzvil
    Hobbies:{‘tennis’}
    Name: ‘Jandy’
    Age: ‘4x’
    Company:’Kakao’
    Hobbies:{‘coding’}
    since:2020
    team:CCO
    since:2020
    university:d
    ongguk
    Person Person Person
    Node(Vertex)
    Label
    Edge
    Property
    참조 https://www.youtube.com/watch?v=c21D8zHmk-E

    View Slide

  6. Name: ‘Asher’
    Age: ‘2x’
    Company:’Buzzvil
    Lives:{‘Ilsan’}
    :KNOWS :KNOWS
    Name: ‘Zendya’
    Age: ‘2x’
    Company:’Buzzvil
    Hobbies:{‘tennis’,
    cook}
    Name: ‘Jandy’
    Age: ‘4x’
    Company:’Kakao’
    Hobbies:{‘coding’,
    ‘swim’}
    since:2020
    team:CCO
    since:2020
    university:
    dongguk
    Person Person Person
    - 그래프 데이터베이스는 NOSQL의 한 종류로써 관계형 데이터베이스의 한계를
    해결하기 위해 만들어진 데이터베이스 입니다. (스키마, 대규모 분산환경)
    -> 그래프 데이터베이스는 Nosql의 한 종류로 같은 Label일 지라도 다른 Property 가 다를
    수 있다. 둘다 Person이라는 같은 라벨을 갖는 노드
    있지만 asher의 경우에는 사는곳이 있고,
    zendya 의 경우에는 취미가 있음
    노드 뿐만아니라 엣지도 같은 라벨을
    갖으면서 다른 프로퍼티를 갖을 수 있다
    그래프 데이터베이스 특징 -
    스키마

    View Slide

  7. 그래프 데이터베이스 특징
    - 비 개발자가 보기에도 한눈에 이해할 수 있게 직관적이다. - 배우기 쉽다

    View Slide

  8. 그래프 데이터베이스 란?
    Graph Storage
    Graph
    Processing
    Engine
    Graph Query
    Language

    View Slide

  9. Graph Query Language
    (Cypher)
    Graph DB SQL
    MATCH SELECT
    CREATE INSERT
    SET UPDATE
    WHERE WHERE
    DELETE, REMOVE, DETACH DELETE

    View Slide

  10. Graph Query Language
    (Cypher)
    Node
    Edge
    ex) (p:Person{name:’Asher’,age:27})-[r:WORK_AT{since:2021}]->(c:Company{name:’Buzzvil’})
    -> 나이:27, 이름:에셔 사람 노드 변수 p 와 이름:버즈빌인 회사 노드 변수 c가 2021년부터 일했다는 관계를 정의한 엣지 변수 r에 의해 연결되어
    있는것을 나타낸 것
    name:Asher
    age:27
    name:Buzzvil
    Person Company
    WORK_AT

    View Slide

  11. CREATE (n:Person{name:'Messi'})-[:LIKE]-> (m:Sports{name:'Soccer'})
    return n, m
    Result
    {
    "identity": 22,
    "labels": [
    "Person"
    ],
    "properties": {
    "name": "Messi",
    }
    }
    Graph Query Language
    (Cypher)

    View Slide

  12. MATCH (person), (sport)
    WHERE person.name = 'Messi' AND sport.name = 'Soccer'
    SET person += {age:34}
    CREATE (person)-[:Play_at]->(team:Team{name:'PSG'})
    return person, sport, team
    Result
    {
    "identity": 22,
    "labels": [
    "Person"
    ],
    "properties": {
    "name": "Messi",
    }
    }
    {
    "identity": 22,
    "labels": [
    "Person"
    ],
    "properties": {
    "name": "Messi",
    "age": 34
    }
    }
    Graph Query Language
    (Cypher)

    View Slide

  13. Graph DB vs RDB
    -Simple lookup (vs Join)
    - Complicate lookup
    -Unstructured data
    (Schema-less)

    View Slide

  14. Simple Lookup
    Asher
    ID:1
    Jandy
    ID:2
    :KNOWS
    ID Name
    1 Asher
    2 Jandy
    person_id Relate_to
    1 2
    2 3
    Relationship
    Person
    Q : Asher가 알고있는 사람의 수?
    // Asher와 KNOWS 로 연결된 노드의 수
    MATCH
    (n:Person{name:'Asher'})-[:KNOWS]->(m)
    RETURN COUNT(m)
    // Asher와 KNOWS 로 연결된 노드의 수
    SELECT COUNT(*) FROM Relationship R
    JOIN Person P on R.relate_to = P.ID
    where P.Name = ‘Asher’ ;
    Foreign Key

    View Slide

  15. Complicated Lookup
    Asher Jandy
    :KNOWS
    Jack Joel
    :KNOWS
    More than
    n distance
    :KNOWS
    Q : Asher와 Joel의 연결 경로?
    Graph Database Query
    MATCH p=(start)-[*]->(finish)
    WHERE start.name='Asher'
    AND finish.name='Joel'
    RETURN p
    Structured Query Language
    WITH ….
    ….
    …..
    ….
    ….
    너무 복잡해서 포기~~~ ㅎㅎ ㅠ
    // 가장 빠른 경로
    MATCH p=shortestPath(start)-[*]->(finish)
    WHERE start.name='Asher'
    AND finish.name='Joel'
    RETURN p

    View Slide

  16. Unstructured data
    Add new column
    Asher
    ID:1
    Jandy
    ID:2
    :KNOWS
    ID Name
    1 Asher
    2 Jandy
    Person_id Relate_to
    1 2
    2 3
    Relationship
    Person
    Q : 언제부터 알고지냈는지 데이터를
    추가한다면?
    // Asher의 KNOWS 에 since 파라미터 추가
    MATCH
    (n:Person{name:'Asher'})-[r:KNOWS]->(m:Person{
    name:'Jandy'})
    SET r += {since:2020} return r
    // Relationship table 에 since column 추가
    ALTER TABLE ‘Relationship’ ADD
    COLUMN ‘since’ INT(10) DEFAULT NULL
    {
    "identity": 45,
    "start": 51,
    "end": 52,
    "type": "KNOWS",
    "properties": {
    "since": 2020
    }
    }
    NEW !!
    Since
    2020
    NULL
    Foreign Key
    since:2020

    View Slide

  17. Unstructured data
    Add new columnS
    Jandy
    ID:2
    ID Name
    1 Asher
    2 Jandy
    Person_id Relate_to
    1 2
    2 3
    Relationship
    Person
    Q : 취미, 좋아하는 아이돌, 운동을 추가한다면
    ?(관계)
    // Asher에 HOBBY, LIKE, EXERCISE 관계 추가
    MATCH (a) WHERE a.name='Asher'
    CREATE (a)-[r:HOBBY]->(b:Hobbies{name:'Cook'})
    MATCH (a) WHERE a.name='Asher'
    CREATE (a)-[r:LIKE]->(b:Idol{name:'Twice'})
    MATCH (a) WHERE a.name='Asher'
    CREATE (a)-[r:EXERCISE]->(b:Sports{name:'Swim'})
    // Asher에 HOBBY, LIKE, EXERCISE 관계 추가
    NEW !!
    Asher
    ID:1
    Cook
    ID:3
    Swim
    ID:4
    Twice
    ID:5
    :KNOWS
    :LIKE
    :EXERCISE
    :HOBBY
    Persion_Id Name
    1 Cook
    2 Book
    HOBBY
    Persion_Id Name
    1 Twice
    2 Black Pink
    LIKE
    Persion_Id Name
    1 Swim
    2 Running
    EXERCISE
    NEW !! NEW !!
    Foreign Key

    View Slide

  18. Graph DB
    응용
    Jack Joel
    Natasha
    게임:

    Wonda
    Dorothy
    Irene
    Girl Friend
    Know
    Know
    Know
    LIKE
    LIKE
    게임:
    배그
    LIKE
    LIKE
    LIKE
    Joel 요즘
    외로운데
    소개팅좀
    시켜줘요~~!
    물론이죠
    Jack,
    이상형이
    어떻게
    되나요?
    저는 게임
    좋아하고 특히
    롤!, 그리고
    서울에
    살았으면
    좋겠어요
    제 주변과
    여자친구
    지인중에
    찾아볼게요!

    View Slide

  19. MATCH (jack:Person{name:'Jack'})-[:LIKE]->(jack_hobby:Hobby)
    MATCH (joel:Person{name:'Joel'})-[:KNOW*1]->(joel_friends)-[:LIKE]->(friends_hobby)
    WHERE jack.live = joel_friends.live AND jack_hobby = friends_hobby
    return COUNT(joel_friends)
    MATCH (jack:Person{name:'Jack'})-[:LIKE]->(jack_hobby:Hobby)
    MATCH
    (joel:Person{name:'Joel'})-[:Girl_Friend]->(joel_girl_friend)-[:KNOW*1]->(joel_girl_friend_friends)-[:LIKE]->(friends_hobby)
    WHERE jack.live = joel_girl_friend_friends.live AND jack_hobby = friends_hobby
    return COUNT(joel_girl_friend_friends), joel_girl_friend_friends.name

    View Slide

  20. Study Match with Graph DB
    -유저 생성
    -원하는 스터디 매칭 요청
    -스터디 매칭 조건이 만족되면 스터디 그룹 생성 + (이전 요청 삭제)
    -> 데이터베이스 쿼리로만 작성

    View Slide

  21. Study Match with Graph DB
    CREATE_USER {
    "identity": 76,
    "labels": [
    "User"
    ],
    "properties": {
    "name": "Asher"
    }
    }

    View Slide

  22. Study Match with Graph DB
    ADD_INTEREST
    StudyRequest

    View Slide

  23. Study Match with Graph DB
    CREATE_STUDY
    Study

    View Slide

  24. Graph DB Usecase
    https://aws.amazon.com/neptune/
    지식 그래프 소셜 네트워킹 추천 엔진
    고객 관심사, 친구, 구매 이력과 같은 정보 간
    관계를 그래프로 저장하고 신속하게 쿼리하여
    개인화되고 연관성이 높은 추천을 제공할 수
    있습니다, 예를 들면 그래프 데이터베이스를
    사용해 사용자와 같은 스포츠를 좋아하고
    비슷한 구매 이력이 있는 다른 사람들이
    구매한 제품을 기반으로 사용자에게 제품을
    추천할 수 있습니다.
    대규모 사용자 프로필 및 상호 작용
    세트를 손쉽게 신속하게 처리하여 소셜
    네트워킹 애플리케이션을 구축할 수
    있습니다. 예를 들어 애플리케이션에 소셜
    피드를 구축하고 있다면, 그래프
    데이터베이스를 사용해 사용자에게 가족,
    '좋아요'를 누른 친구 및 근처에 사는
    친구의 최신 데이터를 우선적으로
    보여주도록 할 수 있습니다.
    지식 그래프를 사용하면 정보를 그래프 모델에
    저장하고 그래프 쿼리를 사용해 사용자가
    상호연결성이 높은 데이터 세트를 손쉽게 탐색하도록
    지원할 수 있습니다. 예를 들어 사용자가 모나리자에
    관심이 있는 경우, 레오나르도 다빈치의 다른 작품
    또는 루브르 박물관에 있는 다른 작품을 찾도록
    지원할 수 있습니다. 지식 그래프를 사용하여 제품
    카탈로그에 주제별 정보를 추가하거나, 복잡한 법규
    모델을 빌드하고 쿼리하거나, Wikidata 같은 일반
    정보를 모델링할 수 있습니다.

    View Slide

  25. Graph DB Usecase
    https://db-engines.com/en/ranking_categories

    View Slide

  26. Q : 그래프 데이터베이스를 사용하면 안되는 경우는 언제인가요?
    A
    - 앞에서 보여드린 것처럼 노드간의 거리가 멀리 떨어져있는 복잡한 조회가 아닌경우에는 큰 차이가없습니다.
    - GraphDB는 로컬 그래프를 처리하는데 있어서는 뛰어나지만, 노드 클러스터를 찾고, 노드 사이의 알려지지 않은
    관계 패턴을 발견하고 그래프 구성요소의 중심 및 구역 사이를 정의하는 작업, 그래프 전체를 보는 글로벌 그래프
    작업에는 성능적으로 많은 자원과 시간을 소모합니다.

    View Slide

  27. 끝!

    View Slide