개발/GraphDatabase

2. Vertex와 Edge

희묭 2023. 6. 10. 12:02

Vertex 혹은 Node, Edge 혹은 Relationship 에 대한 개념을 먼저 짚고넘어가야합니다.

이 두가지는 Graph Database를 이루는 모든 것이라고 봐도 무방하며 모든 결과물은 이 두가지를 이용하여 만들게 됩니다.

 

Vertex 는 RDB에서 레코드 혹은 튜플과 유사하며 우리가 흔히 알고있는 데이터 그자체입니다.그러나 몇가지 특징을 가지고있는데레이블이라는 카테고리로 묶을수 있지만 RDB의 TABLE처럼 정형데이터만 취급할 수 있는 형태가 아닌 다양한 형태의 데이터를 다룰 수 있도록 설계되어 있습니다.

저장소에 따라 인덱스를 같이 저장할수있는 유형이 있고 (Neo4j)

간접적으로 인덱싱을 지원하는 경우도 있습니다 (TinkerPop) 

Vertex 안에는 프로퍼티라는 이름의 속성값을 넣을수 있는데 여기에는 여러가지 자료형을 제공합니다.

사실 Vertex는 일반적인 RDB와 NOSQL을 조금이라도 다뤄봤다면 전혀 어렵지 않게 사용가능합니다.

다음 예제는 Gremlin으로 Vertex를 저장하는 예입니다.

g.addV("testLabel").property("name","aimyon").property("job","singer")

이 Vertex는 testLabel 이라는 레이블이며 속성값으로 name, job 을 가집니다.

Edge 는 RDB에서 외례키와 같은 역활을 하는데 상세히 살펴보면 훨씬 많은 역활을 할 수 있습니다.

우선 Edge의 방향을 설정할 수 있습니다. 

이런 방향에 대해서는 Gremlin보다 Cypher가 더 직관적으로 보이는데

(aimyon)-[:testEdge]->(ohtani)

라는 형태로 IN, OUT에 대한 방향을 설정해줄수 있습니다.

이러한 관계는 이론상 무한히 생성될 수 있고 이미 Edge를 가지고있는 Vertex 사이에도 다른 이름으로 새로운 Edge를 생성할 수 있습니다. 

또한 Edge에도 Vertex와 같이 속성값을 지정해 줄수 있습니다.

g.V().has("name","aimyon").addE("testEdge").property("name","firstEdge").to(__.V().has("name","ohtani"))

testEdge는 aimyon->ohtani 를 이어주는 관계이면서 첫번째 Edge라는 이름을 가진 Edge입니다.

 

간략적으로 Vertex와 Edge에 대해 알아보았습니다.

다음에는 이런 요소들을 활용하여 탐색하는 방법에 대해 알아보겠습니다