<아랑고DB> 7. 그래프 개념잡기
23 Nov 2021 | 아랑고DB 그래프DB1. Node & Edge
그래프 이론에서 버텍스 Vertex(혹은 노드 Node)란 그래프 구성의 기본 단위이다. 보통 다이어그램에서 동그라미 안에 라벨로 표현된다.
엣지 edge는 하나의 노드와 다른 노드를 연결하는 직선이며, 방향성을 띠고있다.
아랑고DB 튜토리얼 페이지에 좋은 예시가 있어 가져왔다. 왕좌의 게임에 나온 주인공들의 부모, 자식 관계를 나타낸 그래프이다.
아랑고DB에는 도큐먼트 컬렉션과 엣지 컬렉션으로 두 타입의 컬렉션이 있다. 하지만 엣지 컬렉션의 레코드도 도큐먼트라고 부르기 때문에 여기서는 편의성 노드 컬렉션과 엣지 컬렉션이라고 부르려고 한다.
우리가 이때까지 작업했던, 오브젝트 형태의 값만 있는 컬렉션은 노드 컬렉션이다.
아랑고DB에서는 노드 컬렉션의 개별 도큐먼트가 노드의 역할을 수행하며, 엣지 컬렉션의 엣지 도큐먼트가 두 노드 도큐먼트를 잇는 엣지의 역할을 수행한다.
엣지 컬렉션의 가장 큰 차이점은 _from
, _to
의 키를 도큐먼트에 필수로 포함해야 한다는 점이다. 이들은 엣지의 시작과 끝을 표현하며, 각 노드 도큐먼트의 _id
값에 맵핑되어있다.
2. 엣지 컬렉션 만드는 법
이미 우리는 AQL을 마스터하고 왔기 때문에 정말 간단하게 짚고 넘어가겠다.
앞서 말한 것처럼 엣지 컬렉션의 차이점은 _from
, _to
필드가 있다는 점 뿐이다.
아랑고 WebUI에서 Edge 컬렉션을 아무거나 만들어주고, 거기서 아래 코드처럼 값을 넣으면 된다.
예를들어, “나는 점심으로 라면을 먹었다. 그리고 저녁으로 돈가스를 먹었다.”를 그래프로 표현한다고 해보자. 나는 아래와 같이 데이터를 구성하기로 했다.
- 노드 컬렉션(사람)
- 노드 컬렉션(음식)
- 엣지 컬렉션(사람 -> 먹었다 -> 음식)
그럼 아래와 같은 도큐먼트가 생성된다.
- 사람 컬렉션 = {나}
- 음식 컬렉션 = {라면, 돈가스}
- 엣지 컬렉션 = {나 -> 라면, 나 -> 돈가스}
이를 코드로 옮기기만 하면 매우 간단히 완성된다.
3. Named Graph vs. Anonymous Graph
아랑고DB에는 두 종류의 그래프가 있다. Named와 Anonymous가 그것인데, 이름에서 알 수 있듯 전자는 네이밍이 되어있고 관리가 되는 그래프를 뜻하고 후자는 그때그때 써먹는 녀석을 의미한다.
둘에 대해 간단히 비교해보자.
Named Graphs
네임드 그래프는 아랑고DB에서 1)여러 제약을 통해 2)갖춰진 형태로 관리해주는 그래프를 지칭한다.
구체적으로는 아래와 같은 기능을 제공해준다. 크게 트랜잭션 제공, 데이터 정합성 확인, 그래프 인터페이스 제공이라고 보면 된다.
- 기본 AQL Traversal
- 모든 수정 작업이 트랜잭션으로 취급된다
- 노드를 지우면 연결된 모든 엣지가 지워진다
- 엣지를 삽입할 때, 엣지 정의에 부합하는지 확인한다
- Web UI에서 시각적으로 편리하게 볼 수 있다
- javascript SmartGraph나 Graph Implementation이 용이하다 (정확히 어떤 걸 의미하는지는 모르겠다)
- RESTful Graph 인터페이스로도 접근 가능
Anonymous Graphs
어나니머스 그래프는 네임드 그래프와는 반대로 그때그때 그냥 있는 컬렉션에서 꺼내어서 쓰는 그래프 구현 방법이다.
아래 기능만 제공해준다.
- 기본 AQL Traversal
What to use
기능의 차이에서 알 수 있듯 네임드 그래프는 그래프 정합성을 보장해주는 역할이 크다. 이는 동시에 데이터베이스에서 수행해야 할 작업량도 많아짐을 의미한다.
어나니머스 그래프는 이런 제약이 없는 대신에 속도가 더 빠르지만, 데이터 정합이 중요하다면 사용자가 관리해야 함을 뜻한다.
자세한 내용은 여기를 읽어보자.
우리가 앞으로 계속 사용할 건 어나니머스 그래프이다. 간편하게 횡단을 배우는 용도로만 사용할 것이기 때문임
4. 어디까지 왔나
그래프 횡단에 들어가기 위한 모든 준비를 끝마쳤다. 다음 글에서는 진짜진짜 재미있는 그래프 횡단을 진짜진짜 들어가려고 한다.
기존 데이터베이스들에서는 감히 상상도 할 수 없었던 것들을 많이 실습해보자!
- 아랑고DB란? 왜 쓰는가?
- 아랑고DB 세팅하기 on Ubuntu
- 아랑고DB 쉘로 붙어서 명령어 체험해보기, 실체 파악해보기
- AQL(Arango Query Lang) 배워보기 1
- AQL(Arango Query Lang) 배워보기 2 - RETURN / UPDATE
- AQL(Arango Query Lang) 배워보기 3 - REPLACE / UPSERT / REMOVE
- (지금 보고있는 글) 그래프 개념잡기
- 그래프 횡단하기 Graph Traversal
- 데이터 모으기 COLLECT / AGGREGATE / MIN_BY, MAX_BY
- 프로젝트. 그래프를 통한 영화 추천시스템 만들어보기 1
- 프로젝트. 그래프를 통한 영화 추천시스템 만들어보기 2 (최종편)