请教一下存储引擎的Hash规则

请问一个服务调用的问题,查询引擎是怎么确定将请求发到哪个分片上,我理解的是如果查询条件带有具体点的信息的话可以通过hash规则找到对应的分片和ip,如果是范围查询不指定点只指定属性应该怎么查询?

另外,limit的下推是怎么支持的,每个分片收到的limit都是一样的吗,如果是这样那么在查询引擎部分是不是还得再实现一次limit?

是的,查询层还要limit一次

1 个赞

不指定点就扫所有分片

2 个赞

有一个使用场景的问题想请教一下,对于多度查询比较多的场景,一般是三度。按照nebula graph的压测显示,一般对轻量级的查询比较友好,如果我限制每度返回的数量,能在线上使用吗三度查询吗。一度限制在1w,二度限制在2w,三度限制在5w。

可以,2.6版本GO已经支持了每步limit的功能

您可以告诉我一下多度查询时怎么请求存储引擎的吗,第一度我查出一千个节点,然后第二度再发一千点查询顶点的请求,还是将顶点汇总做一次scan?

参考go语句语法,GO - Nebula Graph Database Manual

不太明白,我想问的是这里面nebula的实现方式是什么

实现方式就是用上次的终点做下次查询的起点

上次应该有多个终点,是做一次查询,还是多次并发查询呢

首先请求会根据分片分发到不同的storage,这是进程级别的并发,然后进程里面可以设置query_concurrently,这是partition级别的并发

2 个赞

每个storage都会收到一个包含多个顶点的请求是吗

是的,分片到了就会

1 个赞

谢谢大佬,我想问问索引相关的内容,根据索引的介绍,NebulaGraph使用的索引是local index
假设我有三度查询,每一度查询都命中相同的索引,是全部查出来,然后走索引过滤吗?

nebula目前在扩展的时候不会使用索引查询

明白了。谢谢

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。