LoginSignup
4
1

More than 3 years have passed since last update.

JanusGraphことはじめ

Last updated at Posted at 2019-07-31

JanusGraphとは

グラフデータベースで一番使われているのはNeo4jで環境が充実しているのですが、デフォルトのクエリ言語はCypherです。これは別に悪くないのですが、汎用的という意味ではApache Tinkerpopフレームワークを使ったGremlinが使いたいなと思うことがあります。OSSのグラフデータベースでは、Titanが有名かなと思っていたのですが、開発が止まっているようで、ForkされたJanusGraphを使うのが筋がよさそうです。

JanusGraphでは、バックエンドのデータベースとしてcassandra, HBASE, Berkeley DBが使えるようです。今回はJunusGraphをサーバ(Gremlin Server)として公開するための手順を試してみます。ちなみに、Berkeley DBをバックエンドで指定したコンテナはDocker HUBで公開されています。

準備

ここから最新版をダウンロードします。動作にはJVM1.8が必要です。展開したら、デフォルト設定(cassandra)であればすぐに起動できます。以下の例は、その後にすぐに停止をしています。

$ cd janusgraph-0.4.0-hadoop2
$ ./bin/janusgraph.sh start
Forking Cassandra...
Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9200).. OK (connected to 127.0.0.1:9200).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)..... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.

$ ./bin/janusgraph.sh stop
Killing Gremlin-Server (pid 926)...
Killing Elasticsearch (pid 709)...
Killing Cassandra (pid 273)...
$ ./bin/janusgraph.sh clean
Are you sure you want to delete all stored data and logs? [y/N] y
Deleted data in /mnt/e/Works/Tinkerpop/janusgraph-0.4.0-hadoop2/db

設定ファイル

バックエンドの変更や、エンドポイント(Websocket、HTTP)、認証などの設定は、コンフィグファイルを変更して、gremlin-server.shへの引数で指定します。上記のjanusgraphはデフォルトのコンフィグファイルを自動的に読み込むものです。

confフォルダにはサンプルの設定がすでに設定されています。ここではバックエンドの変更をしたいので、インメモリのデータベースを使う設定を作ってみます。これは、主としてテスト用に使うものです。/conf/gremlin-server内のgremlin-server.yamlをコピーして、以下の部分を書き換えます。参照するバックエンドのプロパティファイルを指定しています。

gremlin-server-inmemory.yaml
graphs: {
  graph: conf/gremlin-server/janusgraph-inmemory.properties
}

参照先のプロパティファイルは以下のようにします。

gremlin-server-inmemory.properties
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=inmemory

起動

準備が終えたら、スクリプトで起動するだけです。以下のコマンドで起動できます。SLF4Jをきちんと設定していないせいか、ログがたくさん出ます。

./bin/gremlin-server.sh conf/gremlin-server/gremlin-server-inmemory.yaml

接続

付属のGremlin Consoleで接続してみます。まず、:remoteで接続先を指定しています。
接続先にコマンドを送るためには、:>という記号が必要となります。

./bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.spark
plugin activated: tinkerpop.utilities
plugin activated: janusgraph.imports
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
gremlin> :> graph.addVertex("name", "stephen")
==>v[4288]
gremlin> :> graph.addVertex("name", "stephen")
==>v[4200]

終わりに

Berkeley DBなどについても、同様にコンフィグ、プロパティファイルを記述すれば大丈夫ですが、接続先のElasticsearch(Indexを管理)やBerkeley DBの情報を追記しないとダメっぽいです。ここは先に紹介したDockerで起動するのが楽そうです。

参考

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