Yuwx
1
- nebula 版本:
- 部署方式:单机
- 安装方式:tar包
- 是否为线上版本:N
- 硬件信息
- 磁盘:2T SSD
- CPU、内存信息:32core,256G内存
想请问一下单机版和分布式在性能方面差异有多大,目前我们自己部署了单机版:
配置情况:32核,256G内存,2T SSD磁盘
导入数据量:2亿+节点,3.2亿+边
我们在实际查询过程中,发现单机性能比较差,例如:
LOOKUP ON NIK WHERE NIK.nik_age > 50 YIELD properties(vertex).idcard, properties(vertex).nik_age | limit 10;
就这样一条语句,我们将响应时间设置为10分钟,都无法返回查询结果,MATCH查询性能更差,因此想知道是单机版的原因还是图库索引的问题,因为同样数据量在Neo4j单机版中查询中完全可以正常返回结果。请各位大神赐教,感谢~
从描述看,你其实是进程部署在一台机器上,是单机分布式部署,所以一定会出现进程间交互,性能是按照分布式来考虑的。在2022年2月份左右,我们会发布一个真正的单机版,到时性能会提升不少的。
1 个赞
目前 取点的属性,不建议 使用 properties(vertex).idcard 这种形式, 还没做相关的优化, 这种形式会取点上的所有属性, 可以使用 NIK.idcard 这种形式,这样就只取 idcard这个属性,不会取其他属性
1 个赞
Yuwx
5
那就是说,对于单机版,面对数据量较大时,这种扫描TAG的查询方式,目前没有办法解决是吗?
你创建图空间的时候 分区数目是多少啊,
可以在graph.conf配置 --query_concurrently=true
这样每个取数据的时候 每个分区都有一个线程捞数据,否则的话是单线程捞数据
可能会加快一点速度
1 个赞
Yuwx
7
分区数=10,我看官文上介绍说,分区数设置跟集群磁盘个数有关,一般成5倍,因为我是单机版,所以建图空间时,设置分区数=10。关于graph.conf配置 --query_concurrently=true,我可以试一下,谢谢哈~
Yuwx
8
您好,请问关于图空间分区数量设置,有什么好的建议吗?数据量比较大的时候,是否将图空间分区数设置较大对查询效率会有所提升?
不是分区数越大对查询效率越高的, 按照文档上指导的配置就好了
Yuwx
10
嗯呢,目前graph.conf配置 --query_concurrently=true,分区数=10,但类似 LOOKUP ON NIK WHERE NIK.nik_age > 50 YIELD NIK.idcard, NIK.nik_age | limit 10; 这样查询10分钟内依然无法响应,请问还有什么其他设置或优化可以提高查询效率吗?
你可以 profile 一下, 可以看看 1、 哪些算子占用的时间高, 2、看看limit下推起作用没有
另外你的数据量是多大的
1 个赞
Yuwx
12
好的,我看一下,目前导入的数据量:2亿+节点,3.2亿+边
xjc
13
这个问题已经帮你定位了哦,age上加索引后,索引和limit下推都生效,查询延时降为几秒钟
2 个赞
Yuwx
14
嗯呢了解,目前管道问题如何解决?你们有好的建议吗?
可以把管道语句的explain/profile发下看看吗?
Yuwx
17
辛苦帮忙看看,下面是随便一条带有管道查询的命令explain的结果:
nebula-case02.txt (113.0 KB)
Hi,我看了下explain的结果,最后才做limit,所以是要扫描完所有的数据才会返回前10条结果,肯定会很慢。建议如下:
1、把最后limit前面的管道符去掉,执行一下explain,看limit是否会下推
2、如果还是不行,可以尝试根据业务逻辑,在管道前做拆分,然后再通过多个graphd并发执行。
3、可以尝试在管道前做limit,然后再执行管道语句。