グラフ構造を無償で扱えないのは嫌なので、redisgraphをWSL2に極振りしてインストールしてみました。


エイプリルフールの日なので。

タイトルはエイプリルフールなので。
そうだ、やはり、これからはグラフ構造データベースだ、と思った。...思ったのは数年前か。

前々からNeo4jは試用しているものの、営業の方から商用ライセンスがお高いと教えてもらったので、前々から気になっていたredisgraphを試してみることにした。
私の実行環境は、wsl2+ununtu on windows 10に構築したdocker(付記にインストール記を記す)。
ただし、以下、dockerが走っていれば何でも良い。dockerさえ動いていれば、インストールに要する時間は数分。

redisgraphのサイト:
https://oss.redislabs.com/redisgraph/

redisgraphは、redis上で動くクラフ構造データベース。グラフ構造にクエリをかけるcypherが通る。良い点としては、neo4jよりはメジャーなredis上で動くグラフ構造データベースというところか。割と淡々とメンテされている。

redisgraphのdocker経由での導入

dockerが走っていれば、公式サイトにある通り、以下で、redisgraphが動作する。

docker run -p 6379:6379 -it --rm redislabs/redisgraph

以下のようにredis動いてますアピールがくれば、裏方でredisgraphも動いている。

$ sudo docker run -p 6379:6379 -it --rm redislabs/redisgraph
Unable to find image 'redislabs/redisgraph:latest' locally
latest: Pulling from redislabs/redisgraph
68ced04f60ab: Pull complete
7ecc253967df: Pull complete
765957bf98d4: Pull complete
91fff01e8fef: Pull complete
76feb725b7e3: Pull complete
75797de34ea7: Pull complete
5cba5fea34d7: Pull complete
a7ce59b41c3a: Pull complete
Digest: sha256:f154681547adea4fa4d376e43ee69471d8b4f7d3cd3e2e9a42b26090b19e20fc
Status: Downloaded newer image for redislabs/redisgraph:latest
1:C 01 Apr 2020 08:37:12.414 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 01 Apr 2020 08:37:12.414 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 01 Apr 2020 08:37:12.414 # Configuration loaded
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 5.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

redisgraphの動作確認

redis-clientを用いる。
ubuntuでのインストール:

 sudo apt install redis-tools

cypherのクエリは エイプリルフールなので、こんな感じにしておこう。

GRAPH.QUERY Itai "CREATE (:Rider {name:'mapleメイプル'})-[:rides]->(:Mover {name:'SHシロップ'}), (:Rider {name:'surryサリー'})-[:rides]->(:Mover {name:'SHシロップ'}), (:Rider {name:'kuroko黒子'})-[:rides]->(:Mover {name:'SHUGシュガミ'})"
GRAPH.QUERY Itai "MATCH (r:Rider)-[:rides]->(t:Mover) WHERE t.name = 'SHシロップ' RETURN r.name, t.name"

実行結果

$ redis-cli
127.0.0.1:6379> GRAPH.QUERY Itai "CREATE (:Rider {name:'mapleメイプル'})-[:rides]->(:Mover {name:'SHシロップ'}), (:Rider {name:'surryサリー'})-[:rides]->(:Mover {name:'SHシロップ'}), (:Rider {name:'kuroko黒子'})-[:rides]->(:Mover {name:'SHUGシュガミ'})"
1) 1) "Nodes created: 6"
   2) "Properties set: 6"
   3) "Relationships created: 3"
   4) "Query internal execution time: 3.183400 milliseconds"
127.0.0.1:6379> GRAPH.QUERY Itai "MATCH (r:Rider)-[:rides]->(t:Mover) WHERE t.name = 'SHシロップ' RETURN r.name, t.name"
1) 1) "r.name"
   2) "t.name"
2) 1) 1) "maple\xe3\x83\xa1\xe3\x82\xa4\xe3\x83\x97\xe3\x83\xab"
      2) "SH\xe3\x82\xb7\xe3\x83\xad\xe3\x83\x83\xe3\x83\x97"
   2) 1) "maple\xe3\x83\xa1\xe3\x82\xa4\xe3\x83\x97\xe3\x83\xab"
      2) "SH\xe3\x82\xb7\xe3\x83\xad\xe3\x83\x83\xe3\x83\x97"
   3) 1) "surry\xe3\x82\xb5\xe3\x83\xaa\xe3\x83\xbc"
      2) "SH\xe3\x82\xb7\xe3\x83\xad\xe3\x83\x83\xe3\x83\x97"
3) 1) "Query internal execution time: 1.590000 milliseconds"

...wsl2上では、日本語はcliでは表示されないらしい。。

付記 wsl2にdockerをインストール

概ね、以下の紹介してくださっている通り。
https://yukituna.com/2201/

続く。

続く...のは、本家『痛いのは嫌』の方か。また脱力させてくれることを期待。
redisgaphの使い方編やサーバ側で動かて見る編は、そのうちに。ということで、みんな、エイプリルフールの日には、アドベントカレンダーとは別の気合入っていない記事を書こうよ、と言ってみたり

https://natalie.mu/comic/news/373162