关于NGQL的一些问题

我有一个使用场景如下
NGQL如下

go from '一个顶点' over '一种边' \
where '一种边'.'一个属性'>xxx and '顶点'.'某个属性' =='xxx' \
yield '一种边'._src as key,'顶点'.'某个属性' as value | \
group by $-.key yield '某个聚合方法'($-.value)

1.这其中的where条件会计算下推吗?
2.这其中的 ‘一个顶点’,‘一种边’,‘一个属性’ 都是固定的,但是会反复变换条件,比如’一种边’.‘一个属性’>1 ,>2,>3,等等等等(我现在是根据不同的条件生成相应的NGQL),边信息会有缓存吗?还是每发送一条ngql请求他都会从磁盘上获取到全部的边,然后再根据where条件过滤?
3.假如问题2的答案是每次都获取全部边再where的话,针对我这个场景有什么建议的优化方案吗?

还望不吝赐教~非常感谢!

1.这其中的where条件会计算下推吗?

边加起点的属性是会下推的,假如是终点的属性是没有下推的

2.这其中的 ‘一个顶点’,‘一种边’,‘一个属性’ 都是固定的,但是会反复变换条件,比如’一种边’.‘一个属性’>1 ,>2,>3,等等等等(我现在是根据不同的条件生成相应的NGQL),边信息会有缓存吗?还是每发送一条ngql请求他都会从磁盘上获取到全部的边,然后再根据where条件过滤?

1已经涵盖这个问题

3.假如问题2的答案是每次都获取全部边再where的话,针对我这个场景有什么建议的优化方案吗

内存够的话,可以调下 vertex_cache_num 和 rocksdb_block_cache
并发多的话,可以调下 num_io_threads 和 num_worker_threads

1 个赞

谢谢您~
问题1
我已经明白了
问题2
可能是我表达的不明确,我再补充一下,我想问的是,假如边上的属性值为1,2,3,我第一个ngql where 边属性>2的 ,然后我第二个ngql 是where边属性>3的,第一个ngql获取到的边会缓存下来吗(这样第二个ngql就直接读取缓存的内容了)?
问题3
vertex_cache_num 这个在文档或文件中没有找到~ 这个默认值是多少呀?

第一个ngql获取到的边会缓存下来吗(这样第二个ngql就直接读取缓存的内容了)?

在存储层storage是会存到block cache的,但是graphd还是要再向storage拿数据

vertex_cache_num 默认是 16 * 1000 * 1000

明白了!感谢!