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

  • 时间:
  • 浏览:0
  • 来源:5分11选5_5分3D

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

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

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

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

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

Metaservice 对应的tcp连接是 nebula-metad ,其主要的功能有:

在 Nebula Graph 中顶点由标签 tag 和对应 tag 的属性组构成, tag 代表顶点的类型,属性组代表 tag 拥有的有并不是或多种属性。另另4个多顶点都要要花费有有并不是类型,即标签,也都都要有多种类型。帕累托图标签有一组相对应的属性,.我称之为 schema 。

回到底下的图例,图带有有并不是类型的边,有并不是为 player 指向 player 的 like 关系,属性为 likeness (double);另有并不是为 player 指向 team 的 serve 关系,另另4个多属性分别为 start_year (int) 和 end_year (int)。

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

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

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

MetaService 层为有请况的服务,其请况持久化措施与 Storage 层一样通过 KVStore 措施存储。

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

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

都要说明的是,起点1 和终点2 之间,都都要一块儿发生多条相同已经不类事型的边。

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

在 Nebula Graph 中边由类型和边属性构成,而 Nebula Graph 中边均是有向边,有向边表明另另4个多顶点( 起点 src )指向原本顶点( 终点 dst )的关联关系。此外,在 Nebula Graph 中.我将边类型称为 edgetype ,每第一条边只能有并不是edgetype ,帕累托图 edgetype 相应定义了这种 边上属性的 schema 。

和 Mysql 一样,Nebula Graph 是有并不是强 schema 的数据库,属性的名称和数据类型不是在数据写入前选取的。

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

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

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

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

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

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