Match查询性能太低了,啥原因呢

使用就是官网的docker镜像

vesoft/nebula-graphd:v2.0.0

运行环境Ubuntu

Linux DESKTOP-CBS9UO5 5.4.72-microsoft-standard-WSL2 #1 SMP Wed Oct 28 23:40:43 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

硬件

512G的SSD硬盘: WDC PC SN730 SDBQNTY-512G-1001
CPU i5-i0210U 1.6G 4核8线程
内存16G

这个场景

CREATE TAG organization(name string);
CREATE EDGE HAS_CHILD();

建立5个orga的点;每个点下建了10W个orgb的点,并通过HAS_CHILD边关联【总计50万条边】
如下这种方法查询怎么这么慢,应该建索引吗? 指定VID应该不用吧?

查询的例子类似如下,实际场景需要建个多层的组织树,这个查询性能太慢了

MATCH p=(orga:organization) -[:HAS_CHILD*1]-> (orgb:organization) WHERE id(orga) == '100' and id(orgb)=='199999' RETURN p
MATCH p=(orga:organization) -[:HAS_CHILD*1]-> (orgb:organization) WHERE id(orga) == '100' and orgb.name=='organization199999' RETURN p

 <("100" :organization{name: "organization100"})-[:HAS_CHILD@0 {}]->("199999" :organization{name: "organization199999"})> |

 Got 1 rows (time spent 10606048/10607336 us)

反过来查速度超级快

MATCH p=(orga:organization) -[:HAS_CHILD*1]-> (orgb:organization) WHERE id(orgb)=='199999' RETURN p
Got 1 rows (time spent 19348/19737 us)

Nebula查询需要哪些注意的点,有否参考的地方,使用explain 好像也看不出啥原因?

1 个赞

因为正向查是10w边,反向查就一条边,所以性能不一样。目前还没有做基于代价的优化,所以这块需要用户去根据实际数据做相应调优。

3 个赞

具体如何调优?
主流开源分布式图数据库 Benchmark 中使用的数据集(26亿实体,177亿关系),大致估计平均每个实体 ~ 7 条边,对于边的增多:上千甚至这里的上万,性能会下降很多的;