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/: http 接口处理类
processors:每个操作处理类
test/: 测试类
upgrade/: 升级类

4.storage代码结构:
在这里插入图片描述
admin/: 用户登录
context/:
exec/:数据操作了
http/: http 接口类
index/: 索引处理类
kv/: 数据存储了
mutate/: 更新数据操作类
query/:查询数据了
test/: 测试了
transaction/:事务类

3.1.1 代码讲解

1.meta ,storage 启动流程时序图如下
meta
在这里插入图片描述
在这里插入图片描述
storage
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

附录:
参考文章: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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值