LoginSignup
15

More than 5 years have passed since last update.

Gremlin?GraphDBになぜこのネーミングか。。

Last updated at Posted at 2017-08-14

Do you know about Gremlin ?

どこかで聞いたことのある、グレムリン。Qiitaで話題とするのはグラフデータベース操作言語のグレムリンです。

gremlin-logo.png

なんじゃ、こいつは。

ウチにもいます。こんなのが。甘やかすとデビル化します。Image-1.jpg

TinkerPop

apache-tinkerpop-logo.png

Apache財団さまの「グラフデータベースフレームワーク」プロジェクト。
現在は3世代目となっているらしい。

まずは、
http://tinkerpop.apache.org/docs/current/tutorials/getting-started/
こちらのGetting Startからどんなものか、みてみましょう。

グラフデータベースでの点と辺

グレムリンの友達の友達は?というクエリはこうなる。

g.V().has("name","gremlin").
  out("knows").out("knows").values("name")

g : Graph インスタンス
V : 頂点 (vertex)
has : Traversal Step 関数 

矢印の方向に注目して下の図を見てみよう。

modern-edge-1-to-3-1.png

起点となる1はout vertex(頂点),edge(辺) がつながり、in が対象の点。

V().has("name","gremlin").out("knows")
グレムリンという名前の頂点から、knowsの辺でつながっている点(友達)

.out("knows").values("name")
の友達の名前。

グラフデータベースでは、点と点のつながりを辿っていく。この経路のことをTravesalと呼ぶ。traverseとは横切る、とか走査するとかの意味がある。これまでのSQLであれば、カーソル、といったインスタンスがイテレータになっていたが、グラフデータベースではTraverser になる。

  • vertex 頂点
  • edge 辺
  • Traversal Step 経路走査の手順

この用語を押さえておくとよいかなと思います。

具体的にこんな感じ:

 gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> v1 = graph.addVertex(T.id, 1, T.label, "person", "name", "marko", "age", 29)
==>v[1]
gremlin> v2 = graph.addVertex(T.id, 3, T.label, "software", "name", "lop", "lang", "java")
==>v[3]
gremlin> v1.addEdge("created", v2, id, 9, "weight", 0.4)
==>e[9][1-created->3]

modern-edge-1-to-3-1-gremlin.png

グラフデータベースフレームワーク

ThinkerPopは、上記のグレムリンを含む、いくつかのレイヤーからなるグラフデータベースフレームワーク。ある特定のデータベースやプロセッサにとらわれず、同じコードを使って、異なったグラフデータベース間で自分たちの環境に最適かどうかをテストしたり、並列化へのスケールアップもシームレスに行えます。ThinkPopAPIの下にあるproviderの切り替えで、別のグラフデータベースに入れ替えも可能なAPI形式なので、Gremlinで書いた部分からAPIを経由して、他のOLTPやOLAPを利用することができるようになっています。つまり、上層のGremlin ServerとGremlin言語でのロジックと、データのストラクチャの部分は分離されているので、その時に最適な別のグラフデータベースやプロセッサに置き換えることが可能です。

provider-integration.png

Gremlin Serverは、RESTや WebSocketといったエンドポイントから、リモートのグレムリンスクリプトのリクエストを受けつけて、自身のグラフデータベースから応答を返すサーバーです。thinkpopのjavaドライバからサードパーティの他の言語でもWebSocketで通信することができます。(MySQLやpostgresのドライバー接続のように)

では、次回は実際に使ってみます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15