Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview

TeamD
发布于 2022-10-8 14:08
浏览
0收藏

>>>>架构

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

Nebula 整体设计请参见《图数据库综述与 Nebula 在图数据库设计的实践》(阅读链接:https://nebula-graph.com.cn/posts/nebula-graph-design-in-practice/)。

Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview-鸿蒙开发者社区

整体架构设计

 

在查询引擎架构设计部分,采用无状态设计,不保存任何状态,即便下线也不影响系统,因此可轻松实现横向扩展,整个查询引擎分为语法分析、语义分析、优化器、执行引擎等几个主要部分。

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

Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview-鸿蒙开发者社区

查询引擎架构设计

 

在存储引擎架构设计部分,Storage 包含两个部分,一是 meta 相关的存储,我们称之为 Meta Service ,另一个是 data 相关的存储,我们称之为 Storage Service。

 

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

 

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

Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview-鸿蒙开发者社区

存储引擎架构设计

 

>>>>代码仓库概览

欢迎来到 vesoft 代码仓库(vesoft 为图数据库 Nebula Graph 开发商)。

 

目前 Nebula 产品架构中,包含了图数据库内核、客户端、工具、测试框架、编译、可视化、监控等。

 

以下列出 vesoft-inc 仓库(GitHub 链接:https://github.com/vesoft-inc/)中大部分的代码仓库:

 

●  nebula:Nebula 1.0 的内核代码,GitHub

●  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 可视化工具

>>>>代码结构及模块说明

在 1.0 版本中 Query、Storage 和 Meta 模块代码不作区分放在同一个代码仓中,而 Nebula Graph 2.0 开始在架构上先解耦成三个代码仓:nebula-graph、nebula-common 和 nebula-storage,其中 nebula-common 中主要是表达式的定义、函数定义和一些公共接口、nebula-graph 主要负责 Query 模块、nebula-storage 主要负责 Storage 和 Meta 模块。

 

Nebula Graph

├── cmake
├── conf
├── LICENSES
├── package
├── resources
├── scripts
├── src
│   ├── context
│   ├── daemons
│   ├── executor
│   ├── optimizer
│   ├── parser
│   ├── planner
│   ├── scheduler
│   ├── service
│   ├── session
│   ├── stats
│   ├── util
│   ├── validator
│   └── visitor
└── tests
    ├── admin
    ├── bench
    ├── common
    ├── data
    ├── job
    ├── maintain
    ├── mutate
    ├── query
    └── tck

●  conf/:查询引擎配置文件目录
●  package/:graph 打包脚本
●  resources/:资源文件
●  scripts/:启动脚本
●  src/:查询引擎源码目录
    ◆  src/context/:查询的上下文信息,包括 AST(抽象语法树),Execution Plan(执行计划),执行结果以及其他计算相关的资源。
    ◆  src/daemons/:查询引擎主进程
    ◆  src/executor/:执行器,各个算子的实现
    ◆  src/optimizer/:RBO(基于规则的优化)实现,以及优化规则
    ◆  src/parser/:词法解析,语法解析,:AST结构定义
    ◆  src/planner/:算子,以及执行计划生成
    ◆  src/scheduler/:执行计划的调度器
    ◆ src/service/:查询引擎服务层,提供鉴权,执行 Query 的接口
    ◆  src/session/:Session 管理
    ◆  src/stats/:执行统计,比如 P99、慢查询统计等
    ◆  src/util/:工具函数
    ◆  src/validator/:语义分析实现,用于检查语义错误,并进行一些简单的改写优化
    ◆  src/visitor/:表达式访问器,用于提取表达式信息,或者优化
●  tests/:基于 BDD 的集成测试框架,测试所有 Nebula Graph 提供的功能

 

Nebula Storage

├── cmake
├── conf
├── docker
├── docs
├── LICENSES
├── package
├── scripts
└── src
    ├── codec
    ├── daemons
    ├── kvstore
    ├── meta
    ├── mock
    ├── storage
    ├── tools
    ├── utils
    └── version

●  conf/:存储引擎配置文件目录
●  package/:storage 打包脚本
●  scripts/:启动脚本
●  src/:存储引擎源码目录
    ◆  src/codec/:序列化反序列化工具
    ◆  src/daemons/:存储引擎和元数据引擎主进程
    ◆  src/kvstore/:基于 raft 的分布式 KV 存储实现
    ◆  rc/meta/:基于 KVStore 的元数据管理服务实现,用于管理元数据信息,集群管理,长耗时任务管理等
    ◆  src/storage/:基于 KVStore 的图数据存储引擎实现
    ◆  src/tools/:一些小工具实现
    ◆  src/utils/:代码工具函数

 

Nebula Common

├── cmake
│   └── nebula
├── LICENSES
├── src
│   └── common
│       ├── algorithm
│       ├── base
│       ├── charset
│       ├── clients
│       ├── concurrent
│       ├── conf
│       ├── context
│       ├── cpp
│       ├── datatypes
│       ├── encryption
│       ├── expression
│       ├── fs
│       ├── function
│       ├── graph
│       ├── hdfs
│       ├── http
│       ├── interface
│       ├── meta
│       ├── network
│       ├── plugin
│       ├── process
│       ├── session
│       ├── stats
│       ├── test
│       ├── thread
│       ├── thrift
│       ├── time
│       ├── version
│       └── webservice
└── third-party

Nebula Common 仓库代码是 Nebula 内核代码的工具包,提供一些常用工具的高效实现。一些常用工具包相信各位工程师一定也是了然于心。这里只对其中和图数据库密切相关的目录进行说明。

 

●  src/common/clients/:meta,storage 客户端的 CPP 实现
●  src/common/datatypes/:Nebula Graph 中数据类型及计算的定义,比如 string、int、bool、float、vertex、edge 等。
●  rc/common/expression/:nGQL 中表达式的定义
●  src/common/function/:nGQL 中的函数的定义
●  src/common/interface/:graph、meta、storage 服务的接口定义

以上为本篇文章的介绍内容。

 

 

分类
标签
已于2022-10-8 14:08:03修改
收藏
回复
举报
回复
    相关推荐