2021年7月26日月曜日

RedisGraph を使ってみた

RedisGraph を使ってみた

概要

RedisGraph は Redis 上で GQL を使うことができる redis の拡張モジュールです 今回はインストール方法から簡単 GQL の発行まで行ってみました

環境

  • Redis with RedisGraph 6.2.3
  • RedisInsight 1.10.1

RedisGraph モジュールが有効な redis を起動する

docker イメージがあるのでそれを使うと簡単に立ち上げることができます すでに redis が立ち上がっている場合は一旦停止してから redisgraph を起動してください

  • docker run -p 6379:6379 -d redislabs/redisgraph

データの登録

ではデータを登録してみましょう Graph データを登録するには redis-cli で GRAPH.QUERY を使います

127.0.0.1:6379> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}), (:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}), (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"
1) 1) "Labels added: 2"
   2) "Nodes created: 6"
   3) "Properties set: 6"
   4) "Relationships created: 3"
   5) "Cached execution: 0"
   6) "Query internal execution time: 4.416402 milliseconds"

MotoGP というキーに graphdata を登録します 少し複雑に見えますが一つずつ見ていくと単純な構文になっています

データを登録する場合は CREATE を使います SQL で言うところの INSERT になります デーは括弧で囲いリレーションはハイフンを使います

上記のデータは

  • Valentino Rossi はチーム Yamaha に所属
  • Dani Pedrosa はチーム Honda に所属
  • Andrea Dovizioso はチーム Ducati に所属

という 3 つのデータを登録しています グラフデータはある属性がある属性に紐付いているというデータを登録することで可視化や検索を行うことができます

データベースの一覧を取得する

今回は MotoGP というデータベースに登録しています RedisGraph ではデータベースは単純な key として登録されています なのでデータベースの一覧を取得する場合は keys で OK です

127.0.0.1:6379> keys *
1) "MotoGP"

データの検索

例えばライダーの名前だけを取得してみます SQL で言うところの SELECT 文は GQL では MATCH という構文になります

127.0.0.1:6379> GRAPH.QUERY MotoGP "MATCH (r:Rider) RETURN r.name"
1) 1) "r.name"
2) 1) 1) "Valentino Rossi"
   2) 1) "Dani Pedrosa"
   3) 1) "Andrea Dovizioso"
3) 1) "Cached execution: 0"
   2) "Query internal execution time: 0.189014 milliseconds"

(r:Rider) でノードを検索できます 先頭の小文字の r はエイリアスでその後に続くクエリで r で検索したノードを参照できます 今回はすべてのノードを取得してその中の properties の name だけを表示しています

おまけ: RedisInsight で動作確認

RedisInsight を使えばグラフデータを可視化することができます

すでに RedisInsight が構築されているのであれば左メニューにある「RedisGraph」をクリックします そしてデータベースを選択して GQL を入力すれば OK です

ライダーのノード一覧が表示されたらノードをダブルクリックしてみましょう すると紐付いているチームの情報がグラフ上に展開され確認することができます もし紐付きが複数ある場合はいろいろなノードがリアルタイムで展開されていくのでノードの関連性が簡単に確認することができます

最後に

ある属性とある属性が紐付き関係性がグラフデータのような構造のデータがある場合に RedisGraph に入れて可視化すると簡単に関係性を確認することができるようになります

テーブルデータは SQL、グラフデータは GQL というふうに使い分けできるようになると強力なツールになると思います

参考サイト

0 件のコメント:

コメントを投稿