Dgraph - 튜토리얼 따라해보기

2021. 1. 11. 22:37Dgraph

오늘은 로컬에서 테스트를 진행

docker run --rm -it -p 8080:8080 -p 9080:9080 -p 8000:8000 -v ~/dgraph:/dgraph dgraph/standalone:v20.11.0

 

docker로 테스트를 위한 standalone 이미지를 실행할수 있다.

 

http://localhost:8000 접속해보면 dgraph UI가 나온다. 1분이면 여기까지 띄울수있다. 아무것도 안했지만 뭔가 해낸느낌

여기 콘솔에서 다양한 쿼리를 테스트해볼수 있다.

Dgraph 클러스터는 세가지 컴포넌트로 구성된다.

- Dgraph Zero: 클러스터를 제어하고 데이터를 리밸런싱도 해준다.

- Dgraph Alpha: 데이터를 색인하고 찾는등의 역할을 하는 노드

- Ratel: 브라우저 위에서 dgraph UI를 제공한다. (http://localhost:8000 으로 접속한게 ratel 인듯)

 

기본 용어

nodes: 노드. 여기서 노드는 그래프상에서의 한 점을 의미한다, rdb로 치면 row 하나다.

predicates(한글로 뭐로 번역해야될지 정말 애매하다;; 술어..?): 노드의 properties 를 의미한다. 예를 들어 노드 하나하나를 사람이라고 가정했을때, predicates 는 이름, 나이, 주소, 성별 등등. .다양한 속성들을 의미한다.

edges: 그래프간의 연결, 즉 선을 의미한다.

 

쿼리 날려보기

{
  "set": [
    {
      "name": "코난",
      "age": 33,
      "follows": {
        "name": "Jessica",
        "age": 31
      }
    }
  ]
}

위에 쿼리 콘솔에다가 mutate 라디오버튼을 클릭후 위에 내용으로 Run 하면 데이터가 insert 된다. 이 쿼리문법은 dql 이라고 부르는 (Dgraph query language 의 약자이다) dgraph만의 자체 dsl 이다. 이 포스트 를 보면 dql은 graphql 을 확장한 dgraph만의 질의 언어이다.

 

아무튼 insert 잘 되었는지 확인하기 위해 아래 쿼리를 실행해본다.

{
  people(func: has(name)) {
    uid
    name
    age
  }
}

 

graph db이니 당연히 인접 노드들을 재귀적으로 탐색도 가능해야하겠지..?

 

위 쿼리의 결과중 코난이라는 이름을 가진 node의 uid를 가지고 아래 쿼리를 날려본다

{
  find_follower(func: uid(CONAN_UID)) {
    name 
    age 
    follows {
      name
      age
      follows {
        name 
        age
      }
    }
  }
}

 

으아니 넘나 쉬운것 근데 더 쉬운 방법이 있다.

{
  find_follower(func: uid(MICHAELS_UID)) @recurse(depth: 4) {
    name 
    age
    follows
  }
}

이런식으로 @recurse: 4 를 붙여주면 인접노드들을 4뎁스까지 탐색해서 결과를 가져올 수 있다. 이걸 rdb로 하려고 했으면...join을 엄청나게 많이 해야됬을텐데.. 너무 좋다.

 

내일도 튜토리얼 이어서 해봐야지~~