Apache TinkerPop 이란?

Apache Tinkerpop에 대해 정리

Apache Tinkerpop이란?

Apache TinkerPop은 그래프 계산을 위한 프레임워크이다.

Apache TinkerPop

개별 그래프 데이터베이스의 상위 추상 레이어로 설계되었으며, 이것 하나로 세상에 있는 다양한 그래프 데이터베이스에 대한 조작을 가능하게 하는 것을 목표로 개발되고 있는 것으로 보인다.

이미 Neo4j, JanusGraph, Amazon Neptune 및 Azure Cosmos DB를 비롯한 다양한 클라우드 기반 DB 및 오픈 소스 DB를 지원한다.

프레임워크 자체는 아래 이미지와 같으며, 대략으로 아래와 같이 구성된다.

  • Java 기반 Core API
  • 그래프 순회 언어의 Gremlin
  • 클라이언트와 쿼리 및 데이터를 교환하는 Gremlin Server

그래프 트래버설(Graph traversal) 언어 - Gremlin

Gremlin은 그래프라고 하는 데이터 구조를 조작하는데 특화된 언어로, 관계형 데이타베이스에서의 SQL와 같은 언어이다.

Gremlin으로 쿼리를 간단하게 작성할 수 있다. RDB에서도 그래프를 표현하는 것은 가능하지만, 그에 대한 쿼리를 SQL로 쓰면 JOIN의 수가 늘어나 복잡한 쿼리가 되어 버린다.
그에 반해, Gremlin는 JOIN 없이 메소드 체인으로 간결하게 연결하여 작성할 수 있어서 가독성이 좋다.

아래는 단순히 JOIN이 있는 SQL에서 쿼리를 Gremlin으로 작성하면 어떻게 되는지에 대한 비교이다. (이런 비교는 데이터 모델이 다르기 때문에 페어가 아닌 것 같다)

    SELECT Products.ProductName
      FROM Products
INNER JOIN Categories
        ON Categories.CategoryID = Products.CategoryID
     WHERE Categories.CategoryName = 'Beverages'
g.V().has("name","Beverages").in("inCategory").values("name")

각 언어별 Gremlin 라이브러리

Gremlin은 Python, Javascript 등에서 Gremlin과 같이 트래버설 쓸 수 있는 라이브러리를 공식적으로 제공하고 있다.

기본적으로 각 프로그래밍 언어를 위한 라이브러리(Gremlin-Python 또는 Gremlin-Javascript)는 각 언어로 작성된 트래버설에서 바이트 코드를 생성하고, 이를 JVM으로 보낸다.

Amazon Neptune와 관계

Amazon Neptune에서는 쿼리를 작성하는데 Gremlin과 SPARQL이라는 두 가지 언어를 사용할 수 있지만, 아마도 Gremlin을 사용하게 될 것이다. 이 느낌 SPARQL은 이름뿐만 아니라 코드도 SQL 느낌이 비슷하다.

SELECT DISTINCT ?name
WHERE {
  ?person v:label "person" .
  ?person v:age ?age .
  ?person e:created ?project .
  ?project v:name ?name .
  ?project v:lang ?lang .
    FILTER (?age > 30 && ?lang == "java")
}

원래 Gremlin은 속성 그래프 모델 (노드/엣지/속성)을 기반으로 하지만, SPARQL은 트리플 스토어 모델(주어/술어/목적어)을 기반으로 하기 때문에 개념적으로 Gremlin은 그래프 이론에 가깝다는 것도 있을 것이다.