Open5
JanusGraph(Gremlin)でグラフ操作🧭
JanusGraph(Gremlin)でグラフ操作
グラフを作ってみるところをやる。
各操作の参考は↓です。ありがとうございます🙏
ちなみに、コンテナを起動するとこんなことになるのでリッチな環境に載せ替えた
もし足りなくなるようなら、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]]