图计算场景寻求解决方案
- 场景描述
定义: X节点的ANA是X父节点的ANA的影响因子最大的集合。 求全部节点的ANA
全图数据约2亿节点,求快速计算全部节点的ANA
目前采用celery+redis+nebula解决,但效率太慢,求大佬推荐方案
全图数据约2亿节点,求快速计算全部节点的ANA
目前采用celery+redis+nebula解决,但效率太慢,求大佬推荐方案
感谢回复
这个计算流程有点类似递归
比如X的父节点是A1,A2,A3
如果要计算X的ANA必须要先计算出A1,A2,A3的ANA(预先约定,如果一个节点无父节点,那么其ANA为其自身)
全图计算
更新频率:全量更新一个月一次,增量更新每日一次(约200w节点)@min.wu
随便YY一下啊:
关于jgraphT还没用过,不知道加载大图的话能不能扛得住、是否支持分布式,我现在有点倾向于用spark graphx来计算,但这条路还没走过,不知道行不行得通。
时效性的话,一个月能把全图更新,或者一天能把200w左右的增量更新完成就ok
还有一点就是,全量计算的话我需要遍历全图来判断哪些节点还没有计算,目前似乎还没有类似于scan的方法来遍历全图 @min.wu
如果只是一个点全部的祖先,并不大吧。
当然如果想全图那还是找spark试试吧。
scan这个功能真的现在就是没有。。。
一个点及其祖先加载虽然很快,但如果要实现全部节点都计算完,这个加载的过程就会花费很多时间。
没有scan功能的话我就需要在另外一个地方把节点id都存起来,方便做遍历用
你这个计算是每晚离线计算的吗?还是 发生请求的时候在线计算的?
如果是前者,反正在spark里面了,spark 顺便把scan搞定好了。。。你可以用storage接口,把所有点边批量全扫出来。你可以看下java client repo里面最近一个pr。
后者的话,就是取子图和计算,这个和nebula graph设计初衷比较接近。
离线计算(24小时触发一次)