本文首发于 Nebula Graph Community 公众号

Nebula Graph 是由杭州欧若数网科技有限公司(官网:https://www.vesoft.com/cn/)开源的一款分布式图数据库,它主要用来解决伴随着海量数据产生,在关联数据分析、挖掘方面面临的新挑战。自 2019 年 5 月开源以来,Nebula Graph 受到了广泛的关注,许多企业、技术团队、开发者将 Nebula Graph 应用到业务上构建知识图谱、风控、数据治理、反欺诈、实时推荐等场景。在 Nebula 社区中,越来越多用户从案例分享中掌握 Nebula Graph 的使用方法,与此同时,出现了一种声音,部分用户希望能了解 Nebula Graph 背后的实现思路和原理。

在这样的背景下,我们希望通过 Nebula Graph 源码解读系列,分析设计思路和实现原理,帮助大家深入了解 Nebula Graph,更好地使用 Nebula Graph,同样的,这也将有利于你和 Nebula Graph 社区一块共建更好的 Nebula Graph。

内容概述

源码解读系列主要从 Nebula Graph 系统架构核心模块展开,此外针对社区用户关心的架构限制带来的性能问题将在最后一个章节分析此类问题。

源码解读系列虽名为源码解读,但并非只是对代码实现的分析和函数讲解,更侧重于从设计角度带你掌握 Nebula Graph 实现原理,透过实现的代码来了解背后的设计思路。(由于 Nebula Graph 目前仍处于快速迭代阶段,持续有新功能进入主分支,故部分不断迭代的核心模块的讲解不会过多地深入代码细节)。

目前源码解读系列章节规划如下:

  • Nebula Graph Overview:带你了解 Nebula Graph 架构和代码仓分布、代码结构和模块规划;
  • 核心模块讲解:讲述语义分析、优化、调度等系统模块,Java、Python 等各类客户端的运行原理;
  • 组件通信:讲述 Nebula Graph 中通信机制;
  • 2.0 新特性讲解:从 Variable Length Pattern Match 和索引选择两个点切入讲述 Match 实现的原理;
  • 架构限制和解决方案:针对社区的慢查询中止、超大点处理的问题讲述对应的解决方案;

希望大家读完本系列内容之后,对 Nebula Graph 有一定的了解,明白 Nebula Graph 新功能的实现原理,遇到问题时能从实现角度更快定位问题解决问题。以及,在 Nebula Graph 仓库贡献代码时能更好地写出符合 Nebula Graph 设计思路的代码。

Nebula Graph 完全指南

源码解析系列旨在带你了解 Nebula Graph 代码背后的实现原理,而 Nebula Graph 完全指南(链接:https://docs.nebula-graph.com.cn/site/pdf/NebulaGraph-book.pdf)则是使用大全,从图数据库是什么开始讲起,介绍 nGQL 具体的使用以及对应的参数含义,全方位解决 Nebula Graph 使用问题。

背景知识

本系列内容围绕 Nebula Graph 这一分布式图数据库展开,但是仍然需要读者具备下列技术背景:

  • 数据库基本原理
  • Nebula Graph 架构
  • C++ 语言:Nebula Graph 由 C++ 编程语言实现,读者需要有一定的 C++ 编程基础,这将有利于快速了解代码。

写在文末

这是第一次我们写系列讲解内容,当中若存在不妥和改进点,希望读者能在论坛、微信群等渠道反馈给我们,好让我们更好地产出内容。

想和 Nebula 官方研发团队、社区用户来个面对面的技术交流吗?【nMeetup 认识图数据库】线下活动报名进行中,在 09.04 和我们一起在杭州交流图数据库技术吧~ 【09.04 杭州场报名】【09.11 深圳场报名】

Nebula Graph 源码解读系列 | Vol.00 序言的更多相关文章

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

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

  2. 新手阅读 Nebula Graph 源码的姿势

    摘要:在本文中,我们将通过数据流快速学习 Nebula Graph,以用户在客户端输入一条 nGQL 语句 SHOW SPACES 为例,使用 GDB 追踪语句输入时 Nebula Graph 是怎么 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 如何在centos7中完全卸载Python3

    如何在centos7中完全卸载Python3?根据查到的资料,主要就是卸载,然后删除一些软连接删除干净,逻辑很简单,贴一些具体的操作代码,记录下来 . 卸载Python3的步骤 #卸载python3 ...

  2. 树状数组(区间修改&&区间查询)

    #include<bits/stdc++.h> #define int long long using namespace std; int n,m,x,x1,y,z; int a[100 ...

  3. 时不我待,拥抱趋势,开源IM项目OpenIM技术简介

    坚持开源 开源的理念是基于共享.合作和透明的原则,将软件.代码等知识资源公开并允许他人使用.修改和重新分发,以促进创新和发展.以下是几个开源的优点: 创新:开源可以促进创新,通过让其他人改进或扩展已有 ...

  4. 强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析

    强化学习基础篇[2]:SARSA.Q-learning算法简介.应用举例.优缺点分析 1.SARSA SARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决 ...

  5. 2.5 CE修改器:寻找数值指针

    上一步阐述了如何使用代码替换功能对付变化位置的数据地址,但这种方法往往不能达到预期的效果,所以我们需要学习如何利用指针,在本关的Tutorial.exe窗口下面有两个按钮,一个会改变数值,另一个不但能 ...

  6. 21.12 Python 实现网站服务器

    Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应.它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL.参数等信息生成HTTP响应,并将响应返回 ...

  7. [MySQL] 给root用户设置权限

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'roo ...

  8. Properties集合的使用

    Properties集合是唯一一个可以和IO流相结合的集合 可以将集合中的数据持久化存储,也可以将硬盘上的数据加载到该集合中. 1 Properties集合添加.遍历 1 private static ...

  9. 【Linux】虚拟机太卡咋办?用云服务器Xshell配置Vmware虚拟机【技能篇】

    [Linux]用云服务器Xshell配置Vmware虚拟机[技能篇] 强烈建议本篇收藏后再食用~ 文章目录 Xshell下载 配置Vmware 尾声 平时我们使用虚拟机,可能最烦人的问题就是卡顿了.今 ...

  10. InnoDB存储引擎的行级锁

    InnoDB存储引擎的行级锁 InnoDB存储引擎和MyISAM的其中有两个很重要的区别:一个是事务,一个就是锁机制不同.事务之前有介绍,有问题的去补课;锁方面的不同是InnoDB引擎既有表锁又有行锁 ...