Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
14
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@wan-liner

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

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のドライバー接続のように)

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
14
Help us understand the problem. What are the problem?