LoginSignup
1
2

More than 3 years have passed since last update.

Windows10上のUbuntuにGremlin実行環境の構築

Posted at

ターゲット

  • グラフDBの勉強のためにWindowsPC上に環境を構築したい人
  • その中でも問い合わせ言語にGremlinを使いたい人

What is グラフDB?

  • NoSQLのひとつ
  • つながりを表現するグラフをRDBのような正規化した形ではなく、そのままの形で保存/問い合わせができる
  • 数学のグラフ理論を理解してると、とっつきやすい(かも)

What is Gremlin?

  • Gremlin(グレムリン)はグラフDBの問い合わせ言語のひとつ→公式ドキュメント
  • グラフDBの問い合わせ言語は他にもあり、SQLに近いSPARQL(スパークル)というものもある
  • 特徴的なのはノードや経路の探索をメソッドチェーンの形で問い合わせる点

例えばこんな相関図を考える。Aliceが知っている人をたどれば、Aliceの全く知らないBobにたどり着けるかどうかをGremlinで順に調べている。

graph.png

// ノード(vertex)の一覧をとってきて要素を表示
gremlin> g.V().elementMap()
==>[id:1,label:person,name:Alice]
==>[id:2,label:person,name:Bob]
==>[id:3,label:person,name:Chris]
==>[id:4,label:person,name:Daisy]
==>[id:5,label:person,name:Emily]
==>[id:6,label:person,name:Finn]
==>[id:7,label:person,name:George]
// エッジ(edge)の一覧をとってきて要素を表示
gremlin> g.E().elementMap()
==>[id:7,label:knows,IN:[id:4,label:person],OUT:[id:1,label:person]]
==>[id:8,label:knows,IN:[id:5,label:person],OUT:[id:4,label:person]]
==>[id:9,label:knows,IN:[id:6,label:person],OUT:[id:5,label:person]]
==>[id:10,label:knows,IN:[id:7,label:person],OUT:[id:5,label:person]]
==>[id:11,label:knows,IN:[id:2,label:person],OUT:[id:6,label:person]]
==>[id:12,label:knows,IN:[id:3,label:person],OUT:[id:6,label:person]]
==>[id:13,label:knows,IN:[id:5,label:person],OUT:[id:3,label:person]]
==>[id:14,label:knows,IN:[id:4,label:person],OUT:[id:7,label:person]]

// AliceはBobを知らないけど、知人をたどっていけば知ってる人がいるかもしれない
gremlin> g.V().has('person','name','Alice').out('knows').path().by(valueMap())
==>[[name:[Alice]],[name:[Daisy]]]
gremlin> g.V().has('person','name','Alice').out('knows').out('knows').path().by(valueMap())
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]]]
gremlin> g.V().has('person','name','Alice').out('knows').out('knows').out('knows').path().by(valueMap())
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]],[name:[Finn]]]
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]],[name:[George]]]
gremlin> g.V().has('person','name','Alice').out('knows').out('knows').out('knows').out('knows').path().by(valueMap())
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]],[name:[Finn]],[name:[Bob]]]  ←!Aliceの知人の知人の知人の知人にBobがいた!
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]],[name:[Finn]],[name:[Chris]]]
==>[[name:[Alice]],[name:[Daisy]],[name:[Emily]],[name:[George]],[name:[Daisy]]]

Windows10にUbuntuを入れて、Ubuntu上にGremlinをインストールする

Ubuntuはインストール済みと仮定。

  • 作業時の環境はUbuntu 18.04 LTS

Java 8が必要なので、入ってない場合は入れる。

$ sudo apt install openjdk-8-jre
$ sudo apt install openjdk-8-jdk

入れたら公式からGremlinをダウンロードして解凍。

$ wget https://archive.apache.org/dist/tinkerpop/3.4.4/apache-tinkerpop-gremlin-console-3.4.4-bin.zip
$ unzip apache-tinkerpop-gremlin-console-3.4.4-bin.zip

解凍後にできたディレクトリ下に移動し、起動チェック。

$ cd apache-tinkerpop-gremlin-console-3.4.4
$ bin/gremlin.sh
Dec 06, 2019 12:04:40 AM java.util.prefs.FileSystemPreferences$1 run
INFO: Created user preferences directory.

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin>

試しにグラフを作って挙動を確認。

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V().valueMap()
==>[name:[marko],age:[29]]
==>[name:[vadas],age:[27]]
==>[name:[lop],lang:[java]]
==>[name:[josh],age:[32]]
==>[name:[ripple],lang:[java]]
==>[name:[peter],age:[35]]
gremlin> :exit

グラフが作成できることを確認したので、これで構築は終わり。

1
2
0

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
1
2