查询时nebula宕机

1.数据集大小1100w
2.执行查询
lookup on course where course.credits >= 0 yield course.name, course.credits| limit 10
3.机器使用情况如下


4.查询过程中nebula宕机
5.服务情况如下
[root@Test182 nebula]# ./scripts/nebula.service status all
[INFO] nebula-metad: Running as 6628, Listening on 45500
[INFO] nebula-graphd: Exited
[INFO] nebula-storaged: Exited
[root@Test182 nebula]# uname -a
6.日志

目前是在选型阶段,做的性能测试,所以是单 节点

good case :+1:
当前是先查询所有符合条件的数据,然后再做limit。
这样性能是差点。
应该在查询的过程中一起做limit,

能否具体的指导一下?如果有方法,确实解决了我很大的难点,谢谢

关于limit条件下推,这个目前没有做。

你可以在lookup 的where条件中,多写几个有索引字段的过滤条件。

我测这个就是假使查询结果集很大的前提。我是不是可以理解目前这个pipe是在查询出所有的结果后做的limit,所以导致结果集越大,查询越慢?

你看下二楼的解释吧

了解到您是要做分页查询的测试是吧,分页查询在关系数据库中一般可以通过limit + offset来实现,在上边的语句中,只通过limit是无法做分页查询的,并且目前版本的limit还没有下推到storage层,所以这个方式目前行不通。因为不知道你的schema结构和数据分布情况,我大概可以给出一个解决方案:分页查询的话如果是想用lookup语句,那么需要充分利用where条件,选择一个数据分布均衡的field,进行field的范围查询。 例如 :
tag (c1 int, c2 string)
index on tag (c1)

lookup on tag where c1 > 0 and c2 <= 10 yield …
lookup on tag where c1 > 10 and c2 <= 20 yield …
lookup on tag where c1 > 20 and c2 <= 30 yield …

以上只是一个建议,很可能每个区间中的数据总数不同,但是可以通过这种方式分次扫描出所有数据。

1 个赞

谢谢,但这种写法确实很不利于业务开发。

我认为你可以去github 上提个issue,
支持limit条件下推。

1 个赞