查找路径的优化

  • 图库存储情况:图库中目前有2种tag和3种edge type,两个点之间会有非常多相同类型但不同属性的边,使用rank进行区分,数量可能达到1w+。

  • 需求:目前想要搜索路径,使用了如下这些语句进行搜索,但是最终报出内存溢出的错误。

FIND ALL PATH;

MATCH p=(v1)-[e]->(v2) ... return v;

感觉存储的数量没有特别多,为什么总是搜不出来?

两点间可能有一万多条边的话,潜在的路径是有可能是非常多的。

对,就是它会去排列组合返回很多,那这种情况下除了在入库之前做一些去重,有什么其他可行的方法吗?

可以考虑改改你的模型,edge type 丰富一些,vertex 丰富一些,不要在两点之间搞这么多边出来,否则你这里超级节点太多了,干啥都会相对比较麻烦。虽然 rank 可以区分边,但边太多的话,最好还是把这个区分度转换成用图拓扑去承载,这样查询起来更方便。

1 个赞

还有一个小问题想请教一下,就是如果两个节点之间有非常多的边,比如百万级别,那么我搜索这两个节点之间的满足某些条件的边,是不是依旧会很慢?还是说可以有查询上面的优化?

建议仔细看下楼上的回复

边上可以加索引,可能会有改善。但是还是不建议在两点之间,同一个类型的边,搞太多,这种方式相当于把图在局部当关系型数据库用了(相当于你有一个表,这个表一百多万条记录),最终效果难免是不太好的。如果你的模型一定要有大量的同类型边的话,甚至到百万级别,其实不如用关系型数据库,可能效果更好。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。