图数据库 Nebula Graph 的数据模型和系统架构设计

  • 时间:
  • 浏览:0
  • 来源:5分11选5APP下载_5分11选5APP官方

回到上边的图例,图含有某种类型的边,某种为 player 指向 player 的 like 关系,属性为 likeness (double);另某种为 player 指向 team 的 serve 关系,另一个属性分别为 start_year (int) 和 end_year (int)。

一条逻辑意义上的边,在 Nebula Graph 中原困被建模为另一个独立的 key-value ,分别称为 out-key 和 in-key 。out-key 与这条边所对应的起点存储在同另一个 partition 上,in-key 与这条边所对应的终点存储在同另一个 partition 上。

Nebula Graph:另一个开源的分布式图数据库。作为唯一要能存储万亿个带属性的节点和边的在线图数据库,Nebula Graph 不仅要能在高并发场景下满足毫秒级的低波特率查询要求,还要能实现服务高可用且保障数据安全性。

须要说明的是,起点1 和终点2 之间,可不要能共同占据 多条相同原困不类似于型的边。

计算层对应的进程是 nebula-graphd ,它由删改对等无情况报告无关联的计算节点组成,计算节点之间相互无通信。Query Engine 层的主要功能,是解析客户端发送 nGQL 文本,通过词法解析 Lexer 和语法解析 Parser 生成执行计划,并通过优化后将执行计划交由执行引擎,执行引擎通过 MetaService 获取图点和边的 schema,并通过存储引擎层获取点和边的数据。Query Engine 层的主要优化有:

MetaService 层为有情况报告的服务,其情况报告持久化土法子与 Storage 层一样通过 KVStore 土法子存储。

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

Metaservice 对应的进程是 nebula-metad ,其主要的功能有:

Schema 管理:Nebula Graph 为强 schema 设计。

在 Nebula Graph 中存储层对应进程是 nebula-storaged ,其核心为基于 Raft(用来管理日志基因重组的一致性算法) 协议的分布式 Key-valueStorage 。目前支持的主要存储引擎为「Rocksdb」和「HBase」。Raft 协议通过 leader/follower 的土法子,来保持数据之间的一致性。Nebula Storage 主要增加了以下功能和优化:

和 Mysql 一样,Nebula Graph 是某种强 schema 的数据库,属性的名称和数据类型删改都会在数据写入前选着的。

原困超大规模关系网络的节点数量高达百亿到千亿,而边的数量更会高达万亿,即使仅存储点和边两者也远大于一般服务器的容量。否则须要有土法子将图元素切割,并存储在不同逻辑分片 partition 上。Nebula Graph 采用边分割的土法子,默认的分片策略为哈希散列,partition 数量为静态设置何必 可更改。

本篇主要介绍 Nebula Graph 的数据模型和系统埋点。

在 Nebula Graph 中,每个顶点被建模为另一个 key-value ,根据其 vertexID(或简称 vid)哈希散列后,存储到对应的 partition 上。

Nebula Graph 提供 C++、Java、Golang 某种语言的客户端,与服务器之间的通信土法子为 RPC,采用的通信协议为 Facebook-Thrift。用户也可通过 Linux 上 console 实现对 Nebula Graph 操作。Web 访问土法子目前在开发过程中。

在 Nebula Graph 中顶点由标签 tag 和对应 tag 的属性组构成, tag 代表顶点的类型,属性组代表 tag 拥有的某种或多种属性。另一个顶点须要大约有某种类型,即标签,也可不要能有多种类型。每段标签有一组相对应的属性,我们我们 称之为 schema 。

Nebula Graph 包括另一个主要的功能模块,分别是存储层元数据服务计算层客户端

如上图所示,有某种 tag 顶点:player 和 team。player 的 schema 有某种属性 ID (vid),Name (sting)和 Age (int);team 的 schema 有某种属性 ID (vid)和 Name (string)。

关于数据模型的删改设计会在后续的系列文章中介绍。

在 Nebula Graph 中边由类型和边属性构成,而 Nebula Graph 中边均是有向边,有向边表明另一个顶点( 起点 src )指向曾经顶点( 终点 dst )的关联关系。此外,在 Nebula Graph 中我们我们 将边类型称为 edgetype ,每一条边只有某种edgetype ,每段 edgetype 相应定义了你什儿 边上属性的 schema 。

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

Nebula Graph 采用易理解的有向属性图来建模,也否则说,在逻辑上,图由某种图元素构成:顶点和边。

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

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