关于 MATCH 返回路径查询在高并发下的性能

环境信息

  • nebula 版本:3.4.1 社区版
  • 部署方式:分布式,metad、graphd 和 storaged 各3节点
  • 安装方式:RPM
  • 是否上生产环境:N
  • 硬件信息
    • HDD
    • 8C64G

问题:
如下MATCH 语句在高并发下性能比较差:

MATCH p=(n1:object)-[*..3]->(n2:object) 
WHERE id(n1) == "12456" 
AND n2.object.type == "Linux"
RETURN DISTINCT id(n2) AS id, n2.object.type AS type, n2.object.name AS name, p as paths 
LIMIT 200

测试情况说明:

  • 在 500并发下语句执行耗时超过 6秒
  • 资源消耗情况:CPU 最高 40% 不到,内存占用 8G 左右,感觉瓶颈不在CPU和内存

经过分析,我觉得可能与 p 对象返回了所有节点的信息有关,如果改用 relationships(p) 应该性能有提升。
但我的业务场景下,希望图数据库就能返回所需属性,避免上层业务再丰富一次。

所以,我想问:

  • 不改用 relationships(p) 的情况下是否有办法提升性能?例如参数调优
  • Nebula 是否考虑支持 path 中节点属性的裁剪?目前好像要么全部属性都返回,要么都不返回
  1. type建下索引试试?
  2. 如果你返回的是p,是这样的。如果你要指定某些属性,你就显示的指定边,和边上的属性
  1. type 有索引的,不返回 p 没有性能问题的
  2. 我其实需要的是 边 和 点的部分属性,目前好像不支持

没办法的话,还是返回 relationships(p) 时,上层业务丰富点信息吧

边和点的部分属性的话,不需用返回 p 啊,直接拿就可以