nebula match 查询的原理

  • nebula 版本:3.4.0
  • 部署方式:分布式
  • 安装方式:源码编译
  • 是否上生产环境: N
  • 硬件信息
    • 磁盘:HDD

MATCH (v) RETURN v limit 3; 以这个查询语句为例子,match过程中最终是怎么通过从 rocksDB上取到数据的?对ScanVertexProcessor之后的逻辑不太明白
如果没有索引的话是如下的逻辑, 类型为ScanVertices,执行ScanVertexProcessor的runInSingleThread方法后,之后的逻辑是执行哪个node.cpp,可能是IndexLimitNode.cpp?


如果有索引的话,类型为IndexScan,会执行IndexNode.cpp的doNext方法,猜测是通过getBaseData读取数据,getBaseData()只有IndexVertexScanNode这个类有,插入了日志,但是这个方法并没有执行,是为什么?

哪个查询会执行 IndexVertexScanNode 的getBaseData方法,试了match、fetch、lookUp(更不会执行这个方法)都没执行。

MATCH (v) RETURN v limit 3;会被转换为全表扫描 + limit, 所以不会走index相关算子.

你可以用profile MATCH (v) RETURN v limit 3看具体执行的物理计划.

getBaseData需要lookup时同时返回索引之外的属性才会调用

Debug 模式编译,跟一下代码路径就清楚啦。

1 个赞

好的 谢谢

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