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トラバーサルを記述できる公式ライブラリが提供されている。
- http://tinkerpop.apache.org/docs/current/reference/#gremlin-python
- http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript
- http://tinkerpop.apache.org/docs/current/reference/#gremlin-dotnet
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のほうがグラフ理論に近いといえる。