2021. 1. 11. 22:37ㆍDgraph
오늘은 로컬에서 테스트를 진행
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을 엄청나게 많이 해야됬을텐데.. 너무 좋다.
내일도 튜토리얼 이어서 해봐야지~~