关于图计算、图分析场景的疑惑?

由于对图数据库以及对图计算、图分析 理解可能肤浅,我这边有个场景的解决思路不知道合不合理:
图数据库里面 顶点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等,以及目前的思路是否合理?

1 个赞

没看懂,先mark下

不科学啊 我这描述的 已经对着小黄鸭 描述好几次了

player1和player2 共同效力于team1,team2

:thinking: 这个后面怎么断句

player1和player2 共同效力于team1,team2,

team1,team2 算共现次数2次

:joy: 我调整一下

不知道这样理解对不对:

  1. player1和player2 共同效力于team1,则 player1和player2共同作为team1的邻居,算作一次共现。
  2. player1和player2共同作为team2的邻居节点,又算作一次共现。

如果你要根据某几个具体的点做这种分析,查询语句应该可以做到。
但若针对全图的点,则需要图计算来做了。可以在Graphx上实现,具体的实现过程要在Graphx上写个算法了

是这样理解的。

如果你要根据某几个具体的点做这种分析,查询语句应该可以做到。// 我们展示三层节点关系图 也就200个点左右

但若针对全图的点,则需要图计算来做了。可以在Graphx上实现,具体的实现过程要在Graphx上写个算法了 // 是针对全图 任意节点可作为中心节点 特定条件(三层关系,而且对team属性做过滤条件,条件不固定 所以不好用spark Graphx了吧)