由于对图数据库以及对图计算、图分析 理解可能肤浅,我这边有个场景的解决思路不知道合不合理:
图数据库里面 顶点player和team ,边serve和like。边是无向边。
例子来源:https://docs.nebula-graph.com.cn/manual-CN/1.overview/1.concepts/1.data-model/
我要查找以某一个player为中心节点的球员间三层关系图
规则是:
针对每一个节点找共现次数最多的top5的邻节点(player1和player2 只要效力过team1和team2这两支球队,算共现次数2次)
要画如下三层关系图:
我现在的思路是这样的:
1 根据中心节点 找共现次数top5个节点(第一层数据)
2 拿到第一层的5个节点,分别找到其对应的共现次数top5节点,最多25个节点(第二层数据)
3 拿到第二层的25个节点,分别找到对应的共现次数top5节点,最多125个节点(第三层数据)
4 拿到以上三层数据 共155个节点 计算他们之间的关系(只要共同效力于一个球队 就要两个节点有关系)
基于这样的思路:
查询语法主要分为2类:
基于某一个节点的共现次数top5计算(需要查询 31次查询)
go from 350572 over serve yield serve._dst as id | go from $-.id over serve YIELD serve._dst as dst | GROUP BY $-.dst yield $-.dst as id,count(1) as count | order by $-.count desc | limit 5
某一个节点与其他一堆节点的一度关系的计算(共155个节点 计算他们之间的关系,需要查询154次)
go from 350572 over serve yield serve._dst as id | go from $-.id over serve where udf_is_in(serve._dst,245380,202872,336904,363594,195380,353465,等等) YIELD serve._dst as dst | GROUP BY $-.dst yield $-.dst as id,count(1) as count
要绘制这样三层关系图:涉及到的计算和查询挺多的。不知道能否可以利用图计算、图分析:JGraphT,Graphx等,以及目前的思路是否合理?