NebulaGraph 源码分析

一.NebulaGraph

1.1.NebulaGraph 架构

Nebula Graph 是一个开源的分布式图数据库。Nebula采用存储计算分离的设计,解耦存储与计算。同时在数据库内核之外,我们也提供了很多周边工具,比如数据导入,监控,部署,可视化,图计算等等。
Nebula 设计请参见《图数据库综述与 Nebula 在图数据库设计的实践》。

整体架构设计如下图所示:

在这里插入图片描述
查询引擎采用无状态设计,可轻松实现横向扩展,分为语法分析、语义分析、优化器、执行引擎等几个主要部分。

详细设计参见《图数据库的查询引擎设计》,《初识 Nebula Graph 2.0 Query Engine》。

查询引擎架构设计如下图所示:
在这里插入图片描述
Storage 包含两个部分, 一是 meta 相关的存储, 我们称之为 Meta Service ,另一个是 data 相关的存储, 我们称之为 Storage Service。

Storage Service 共有三层:最底层是 Store Engine;之上便是我们的 Consensus 层,实现了 Multi Group Raft;最上层,便是我们的 Storage interfaces,这一层定义了一系列和图相关的 API。

详细设计参见《图数据库的存储设计》 。

存储引擎架构设计如下图所示:
在这里插入图片描述

二.NebulaGraph 代码仓库概览

2.1.NebulaGraph git 代码地址说明

欢迎来到 vesoft 代码仓库(vesoft 为图数据库 Nebula Graph 开发商)。
https://github.com/vesoft-inc
目前 Nebula 产品架构中,包含了图数据库内核,客户端,工具,测试框架,编译,可视化,监控等。

本文的主要目的是简单介绍 Nebula Graph 主要 Repo 的代码结构,并说明各个模块的基本功能。后续会有更多的详细设计说明。希望能够帮助到社区读者更好地理解 Nebula Graph,并能够为 Nebula 社区做出自己的贡献,比如提交 Feature,修复 Bug,提交文档等。

以下列出 vesoft-inc 仓库中大部分的代码仓库:

nebula:Nebula 1.0 的内核代码
nebula graph:Nebula 2.0 查询计算引擎
nebula storage:Nebula 2.0 存储引擎
nebula common:Nebula 2.0 内核工具包
Nebula Clients
nebula-java:Java 客户端
nebula-cpp:CPP 客户端
nebula-go:Go 客户端
nebula-python:Python 客户端
Nebula Tools
nebula-importer:基于 Go 客户端实现的高性能数据导入工具
nebula-spark-utils:收录工具 Spark Connector、Exchange、Algorithm
nebula-br:备份恢复工具
nebula-ansible、nebula-operator:部署工具
Nebula Test
nebula-bench:压力与性能测试工程
nebula-chaos:混沌测试工程
Compiling
nebula-third-party:Nebula Graph 图数据库内核依赖的第三方包
nebula-gears:Nebula Graph 图数据库内核工具链
nebula-graph-studio:Nebula Graph 可视化工具

nebula :NebulaGraph2.6.0以上版本

三.代码结构及模块说明

3.1.Nebula–Graph 代码结构

2.6.0以上版本 graph,storage,common 都在同一个git 项目里面
https://github.com/vesoft-inc/nebula.git
这个项目代码结构图:
在这里插入图片描述

src/clients/:meta,storage 客户端的 CPP 实现
codec/:

src/daemons/:查询引擎主进程
src/interface/:graph、meta、storage 服务的接口定义
kvstore/:基于 raft 的分布式 KV 存储实现
tests/:基于 BDD 的集成测试框架,测试所有 Nebula Graph 提供的功能
parser/:词法解析,语法解析,:AST结构定义
mock/: 一些模拟数据方便调试
tools/:
version/:
webservice/:

1.graph 代码结构:

在这里插入图片描述
context/:查询的上下文信息,包括 AST(抽象语法树),Execution Plan(执行计划),执行结果以及其他计算相关的资源。
executor/:执行器,各个算子的实现
optimizer/:RBO(基于规则的优化)实现,以及优化规则
planner/:算子,以及执行计划生成
scheduler/:执行计划的调度器
service/:查询引擎服务层,提供鉴权,执行 Query 的接口
session/:Session 管理
stats/:执行统计,比如 P99、慢查询统计等
util/:工具函数
validator/:语义分析实现,用于检查语义错误,并进行一些简单的改写优化
visitor/:表达式访问器,用于提取表达式信息,或者优化

2.common 代码结构:
在这里插入图片描述

Nebula Common 仓库代码是 Nebula 内核代码的工具包,提供一些常用工具的高效实现。一些常用工具包相信各位工程师一定也是了然于心。这里只对其中和图数据库密切相关的目录进行说明。
src/common/datatypes/:Nebula Graph 中数据类型及计算的定义,比如 string,int,bool,float,Vertex,Edge 等。
rc/common/expression/:nGQL 中表达式的定义
src/common/function/:nGQL 中的函数的定义
3.meta代码结构:
在这里插入图片描述
common/:
http/:
processors:
test/:
updrade/:

4.storage代码结构:
在这里插入图片描述
admin/:
context/:
exec/:
http/:
index/:
kv/:
mutate/:
query/:
test/:
transaction/:

3.1.1 代码讲解

schema 创建过程

CreateSpaceProcessor —BaseProcessor–

附录:
参考文章:https://nebula-graph.com.cn/posts/nebula-graph-source-code-reading-01/
https://blog.csdn.net/weixin_44324814/article/details/107808854?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EOPENSEARCH%7ERate-1.pc_relevant_aa&utm_relevant_index=1

猜你喜欢

转载自blog.csdn.net/shuai809853150/article/details/124118366
今日推荐