Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

wan-liner
Follow #カチャカチャッターン カチャカチャッターンとは。 インストール最小限、コーディング最小限、 サーバーはクラウドで都度クリーンインストール。 ミニマリストエンジニア。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした