上篇序言中我们讲述了源码解读系列的由来,在 Nebula Graph Overview 篇中我们将带你了解下 Nebula Graph 的架构以及代码仓分布、代码结构和模块规划。

1. 架构

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。

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

存储引擎架构设计如下图所示:

2. 代码仓库概览

  

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

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

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

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

3. 代码结构及模块说明

3.1 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 提供的功能

3.2 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 存储实现
    • src/meta/:基于 KVStore 的元数据管理服务实现,用于管理元数据信息,集群管理,长耗时任务管理等
    • src/storage/:基于 KVStore 的图数据存储引擎实现
    • src/tools/:一些小工具实现
    • src/utils/:代码工具函数

3.3 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 服务的接口定义

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

交流图数据库技术?加入 Nebula 交流群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~

Nebula Graph 源码解读系列 | Vol.01 Nebula Graph Overview的更多相关文章

  1. swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?

    date: 2018-8-01 14:22:17title: swoft| 源码解读系列二: 启动阶段, swoft 都干了些啥?description: 阅读 sowft 框架源码, 了解 sowf ...

  2. Alamofire源码解读系列(二)之错误处理(AFError)

    本篇主要讲解Alamofire中错误的处理机制 前言 在开发中,往往最容易被忽略的内容就是对错误的处理.有经验的开发者,能够对自己写的每行代码负责,而且非常清楚自己写的代码在什么时候会出现异常,这样就 ...

  3. Alamofire源码解读系列(四)之参数编码(ParameterEncoding)

    本篇讲解参数编码的内容 前言 我们在开发中发的每一个请求都是通过URLRequest来进行封装的,可以通过一个URL生成URLRequest.那么如果我有一个参数字典,这个参数字典又是如何从客户端传递 ...

  4. Alamofire源码解读系列(三)之通知处理(Notification)

    本篇讲解swift中通知的用法 前言 通知作为传递事件和数据的载体,在使用中是不受限制的.由于忘记移除某个通知的监听,会造成很多潜在的问题,这些问题在测试中是很难被发现的.但这不是我们这篇文章探讨的主 ...

  5. Alamofire源码解读系列(五)之结果封装(Result)

    本篇讲解Result的封装 前言 有时候,我们会根据现实中的事物来对程序中的某个业务关系进行抽象,这句话很难理解.在Alamofire中,使用Response来描述请求后的结果.我们都知道Alamof ...

  6. Alamofire源码解读系列(六)之Task代理(TaskDelegate)

    本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很 ...

  7. Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)

    Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager) 本篇主要讲解iOS开发中的网络监控 前言 在开发中,有时候我们需要获取这些信息: 手机是否联网 ...

  8. Alamofire源码解读系列(八)之安全策略(ServerTrustPolicy)

    本篇主要讲解Alamofire中安全验证代码 前言 作为开发人员,理解HTTPS的原理和应用算是一项基本技能.HTTPS目前来说是非常安全的,但仍然有大量的公司还在使用HTTP.其实HTTPS也并不是 ...

  9. Alamofire源码解读系列(九)之响应封装(Response)

    本篇主要带来Alamofire中Response的解读 前言 在每篇文章的前言部分,我都会把我认为的本篇最重要的内容提前讲一下.我更想同大家分享这些顶级框架在设计和编码层次究竟有哪些过人的地方?当然, ...

  10. Alamofire源码解读系列(十)之序列化(ResponseSerialization)

    本篇主要讲解Alamofire中如何把服务器返回的数据序列化 前言 和前边的文章不同, 在这一篇中,我想从程序的设计层次上解读ResponseSerialization这个文件.更直观的去探讨该功能是 ...

随机推荐

  1. vue中jsx

    //item.vue 文件如下 <template> <div> <h1 v-if="id===1"> <slot></slo ...

  2. Vue 中keep-alive组件将会被缓存

    动态包裹哈 <keep-alive> <component :is="comName"></component> </keep-alive ...

  3. css动画京东小布hover放大

    <style> .box { width: 183px; height: 130px; overflow: hidden; border: 1px solid pink; } div im ...

  4. C/C++ x32 Inline Hook 代码封装

    Hook 技术常被叫做挂钩技术,挂钩技术其实早在DOS时代就已经存在了,该技术是Windows系统用于替代DOS中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控 ...

  5. C++ STL 标准模板库(排序/集合/适配器)算法

    C++ 标准模板库STL,是一个使用模板技术实现的通用程序库,该库由容器container,算法algorithm,迭代器iterator,容器和算法之间通过迭代器进行无缝连接,其中所包含的数据结构都 ...

  6. Win32汇编:汇编版PE结构解析器

    PE格式是Windows系统下最常用的可执行文件格式,有些应用必须建立在了解PE文件格式的基础之上,如可执行文件的加密与解密,文件型病毒的查杀等,熟练掌握PE文件结构,有助于软件的分析. 在PE文件中 ...

  7. ubuntu16.04编译安装nginx1.24.0

    环境: Distributor ID: Ubuntu Description: Ubuntu 16.04.7 LTS Release: 16.04 Codename: xenial 安装包: pcre ...

  8. laravel生成二维码,并添加背景图片,图标logo

    1.安装组件 composer require simplesoftwareio/simple-qrcode 1.3.* 在 config/app.php 注册服务提供者: SimpleSoftwar ...

  9. 【可观测性系列】 OpenTelemetry Collector的部署模式分析

    作者简介:大家好,我是蓝胖子 ️博客首页:主页蓝胖子的编程梦 ️热门专题:我的服务监控实践 ,500行代码手写Docker **每日一句:白日莫闲过,青春不再来 大家好,我是蓝胖子,在前面我介绍了下O ...

  10. 如何使用Ghost对UEFI+GPT+WIN10进行备份还原?

    以前BIOS兼容模式下用MBR分区表来备份还原系统使用Ghost很轻松就可以完成系统还原和备份,对于新版BIOS及支持GPT+UEFI快速启动的系统来说又应该如何备份还原呢?答案依旧是Ghost,只不 ...