nebula代码走读——从Validator到Executor
整体架构
Nebula Graph Query Engine 主要分为四个模块,分别是 Parser、Validator、Optimizer 和 Executor。
Parser 完成对语句的词法语法解析并生成抽象语法树(AST),Validator 会将 AST 转化为执行计划,Optimizer 对执行计划进行优化,而 Executor 负责实际数据的计算。
Graphd服务命令执行计划
命令行执行
QueryInstance
execute
validateAndOptimize
Validator::validate
makeValidator -> validator //生成对应的字句
validator->validate //字句生成执行计划
validateImpl //校验
toPlan //生成执行计划
getAstContext //获取抽象语法树
Planner::toPlan
plannersMap().find 找到 registPlanners注册的每个字句对应的计划
planner.instantiate()->transform
// 以LookupPlanner为例
edgeIndexFullScan
plan.root = Filter::make // 设置过滤
plan.root = Project::make // 设置yield
//执行
AsyncMsgNotifyBasedScheduler::schedule()
create
makeExecutor // 根据planner生成实际逻辑执行队列
doSchedule
queue.push
scheduleExecutor
runExecutor
execute
executor->open //正式执行前的一些初始化操作
executor->execute
// 以IndexScanExecutor为例
IndexScanExecutor::execute
indexScan
storageClient->lookupIndex //RPC到storaged服务执行查询命令
handleResp
finish //完成当前planNode
ectx_->setResult // 将当前结果输出作为下一个节点的数据依赖输入
Storaged命令执行计划
Storaged服务接收到graphd的处理请求,以lookup为例
LookupProcessor::process
doProcess
runInSingleThread
buildPlan // 生成执行计划(与graph的执行计划不同,粒度更小)
for part : parts // 遍历part
StoragePlan::go
RealNode::execute
doExecute // planNode执行各自的操作
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步