分享 使用 Docker 构建 Nebula Graph 源码

NebulaGraph · 2019年09月06日 · 最后由 yfractal 回复于 2019年09月09日 · 4531 次阅读

Nebula Graph 介绍

Nebula Graph 是开源的高性能分布式图数据库。项目使用 C++ 语言开发,cmake 工具构建。其中两个重要的依赖是 Facebook 的 Thrift RPC 框架和 folly 库.

由于项目采用了 C++ 14 标准开发,需要使用较新版本的编译器和一些三方库。虽然 Nebula Graph 官方给出了一份开发者构建指南,但是在本地构建完整的编译环境依然不是一件轻松的事。

开发环境构建

Nebula Graph 依赖较多,且一些第三方库需本地编译安装,为了方便开发者本地编译项目源码,Nebula Graph 官方为大家提供了一个预安装所有依赖的 docker 镜像。开发者只需如下的三步即可快速的编译 Nebula Graph 工程,参与 Nebula Graph 的开源贡献:

$ docker pull vesoft/nebula-dev
  • 运行 Docker 并挂载 Nebula 源码目录到容器的 /home/nebula 目录
$ docker run --rm -ti -v {nebula-root-path}:/home/nebula vesoft/nebula-dev bash

感谢社区伙伴@阿东 提的建议,把上面的 {nebula-root-path} 替换成你 Nebula Graph 实际 clone 的目录

为了避免每次退出 docker 容器之后,重新键入上述的命令,我们在 vesoft-inc/nebula-dev-docker 中提供了一个简单的 build.sh 脚本,可通过 ./build.sh /path/to/nebula/root/ 进入容器。

  • 使用 cmake 构建 Nebula 工程
docker> mkdir _build && cd _build
docker> cmake .. && make -j2
docker> ctest # 执行单元测试

提醒

Nebula 项目目前主要采用静态依赖的方式编译,加上附加的一些调试信息,所以生产的一些可执行文件会比较占用磁盘空间,建议小伙伴预留 20G 以上的空闲空间给 Nebula 目录 :)

Docker 加速小 Tips

由于 Docker 镜像文件存储在国外,在 pull 过程中会遇到速度过慢的问题,这里 Nebula Graph 提供一种加速 pull 的方法:通过配置国内地址解决,例如:

Linux 小伙伴可在 /etc/docker/daemon.json 中加入如下内容(若文件不存在,请新建该文件)

{
  "registry-mirrors": [
    "https://dockerhub.azk8s.cn",
    "https://reg-mirror.qiniu.com"
  ]
}

macOS 小伙伴请点击 Docker Desktop 图标 -> Preferences -> Daemon -> Registry mirrors。在列表中添加 https://dockerhub.azk8s.cnhttps://reg-mirror.qiniu.com 。修改后,点击 Apply & Restart 按钮,重启 Docker。

Nebula Graph 社区

Nebula Graph 社区是由一群爱好图数据库,共同推进图数据库发展的开发者构成的社区。

本文由 Nebula Graph 社区 Committer 伊兴路贡献,也欢迎阅读本文的你参与到 Nebula Graph 的开发,或向 Nebula Graph 投稿。

附录

Nebula Graph:一个开源的分布式图数据库。

GitHub:https://github.com/vesoft-inc/nebula

知乎:https://www.zhihu.com/org/nebulagraph/posts

微博:https://weibo.com/nebulagraph

有意思,有想法,有人试过在 MacOS 上直接build吗?不喜欢在 Mac 上开虚拟机,费电。。。

请教几个问题

CAP 是 C 还 A?

在就是求介介绍介绍锁相关或者是如何保证一致性的。

yfractal 回复

😯 大兄弟你回复错帖子了吧

ericguo 回复

Nebula Graph 优先支持 Linux 平台,macOS 上没有做过测试,👀 欢迎直接在 macOS 上编译 Nebula Graph,不过直接编译的话每个第三方依赖都编译一遍有些耗时,可以试试把源码目录挂载到 Docker 容器里面就可以直接 cmake/make 进行 build

yfractal 回复

这个账号是你们团队的运营账号吧。。。在哪个帖子回复不是一样的。。。

yfractal 回复

😂 是啊,只是突然有些懵逼,为啥出来个一致性,我们用的 Raft 保持副本一致的

有和 neo4j 或 dgraph 对比的文章吗

NebulaGraph 回复

额,我是好奇,脑裂的情况下,你们是咋处理的。

hooopo 回复

暂时没有这块的对比文章

yfractal 回复

数据写入过程中是不存在脑裂情况的,也不允许出现脑裂,否则数据会乱套; 读取过程中可能会存在脑裂,这是一种假脑裂,在一段时间内会读取不到新数据,你可以参考之前 PingCAP 对读取脑裂处理方案(阅读传送门:https://mp.weixin.qq.com/s/ppd78-WmFVNH5tN3wTdvgA),只不过 PingCAP 称他为 region leader,在 Nebula Graph 里是 part raft,和 region leader 的概念类似

NebulaGraph 回复

CAP 是说,裂了是保证可用性,还是一致性。

裂了就裂了,不会管数据库在做什么。。。问题是裂了的时候,数据库做什么。。。要么不工作,要么工作,数据是错的。。。

“一段时间内会读取不到新数据”这个就是保证可用性。

PingCAP”这种方法牺牲了一定的可用性(在脑裂时部分客户端的可用性)换取了一致性的保证“,这个保证的是一致性。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号