Apache TinkerPopとは

Apache TinkerPopの概要

Apache TinkerPopとは

Apache TinkerPopは、グラフ計算のためのフレームワークである。

Apache TinkerPop

個々のグラフデータベースを覆う抽象化レイヤーとして設計されており、さまざまなグラフデータベースを共通の方法で操作できるようにすることを目標としている。

すでにNeo4j、JanusGraph、Amazon Neptune、Azure Cosmos DBをはじめ、さまざまなクラウドベースおよびオープンソースのデータベースに対応している。

このフレームワークは、おおむね次の要素で構成される。

  • JavaベースのCore API
  • グラフトラバーサル言語Gremlin
  • クライアントとクエリやデータを交換するGremlin Server

グラフトラバーサル言語:Gremlin

Gremlinは、グラフというデータ構造の操作に特化した言語であり、リレーショナルデータベースにおけるSQLと同様の役割を持つ。

Gremlinではクエリを簡潔に記述できる。RDBMSでもグラフを表現できるが、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ライブラリ

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のほうがグラフ理論に近いといえる。