Open5

JanusGraph(Gremlin)でグラフ操作🧭

もももも

JanusGraph(Gremlin)でグラフ操作

グラフを作ってみるところをやる。
各操作の参考は↓です。ありがとうございます🙏
https://zenn.dev/bohebohe/scraps/19fa6fe39870fa


ちなみに、コンテナを起動するとこんなことになるのでリッチな環境に載せ替えた

もし足りなくなるようなら、WSLの設定を変えてみてもよいかも

もももも

①空のグラフを作る

何もないグラフを作る

gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]

グラフのネタはHyper-Vで組んでるVMネットワークっぽいもの↓

Edgeは双方向で張りたい

もももも

②Vertexを作成する

gremlin> v1 = g.addV("V-Switch").property(id, 1).property("Name", "SW01").property("IP", "192.168.100.1").next()
==>v[1]
gremlin> g.V(1).valueMap()
==>[IP:[192.168.100.1],Name:[SW01]]
gremlin> v2 = g.addV("VM01").property(id, 11).property("Name", "VM01").property("IP", "192.168.100.11").property("OS", "Rocky").property("RAM", "4").next()
==>v[11]
gremlin> v3 = g.addV("VM02").property(id, 12).property("Name", "VM02").property("IP", "192.168.100.12").property("OS", "Rocky").property("RAM", "3").next()
==>v[12]
gremlin> g.V().valueMap()
==>[IP:[192.168.100.1],Name:[SW01]]
==>[OS:[Rocky],IP:[192.168.100.11],Name:[VM01],RAM:[4]]
==>[OS:[Rocky],IP:[192.168.100.12],Name:[VM02],RAM:[3]]
もももも

③Edgeを作成する

SW01⇔VM01, SW01⇔VM02のEdgeができた

gremlin> g.addE("Connected").from(v1).to(v2).property(id, 100).property("bandwidth", 1)
==>e[100][1-Connected->11]
gremlin> g.addE("Connected").from(v2).to(v1).property(id, 200).property("bandwidth", 1)
==>e[200][11-Connected->1]
gremlin> g.addE("Connected").from(v1).to(v3).property(id, 101).property("bandwidth", 5)
==>e[101][1-Connected->12]
gremlin> g.addE("Connected").from(v3).to(v1).property(id, 201).property("bandwidth", 5)
==>e[201][12-Connected->1]
gremlin> g.E().valueMap()
==>[bandwidth:1]
==>[bandwidth:5]
==>[bandwidth:1]
==>[bandwidth:5]
もももも

④いろいろな操作

途中で二股に分かれる感じのグラフを用意。Edgeには重み付けをしてみている。

1. 条件に合うVertex→条件に合うVertex間のpath

gremlin> g.V().has(id, 101).repeat(__.out()).until(__.has(id, 106)).path()
==>[v[101],v[102],v[104],v[105],v[106]]
==>[v[101],v[102],v[103],v[105],v[106]]