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

分类:编程技术 时间:2024-02-20 16:14 浏览:0 评论:0
0
本文向您展示如何设计图数据库Nebula Graph的数据模型和系统架构。内容简洁易懂。绝对会让你眼前一亮。希望您能从本文的详细介绍中有所收获。

下面主要介绍Nebula Graph的数据模型和系统架构设计。

DirectedPropertyGraph

Nebula Graph 采用易于理解的有向属性图来建模,也就是说,从逻辑上讲,图是由顶点和边两个图元素组成。

Vertex Vertex

在 Nebula Graph 中,顶点由标签 tagtag 对应的属性组成组组成,tag表示顶点的类型,属性组表示tag拥有的一个或多个属性。顶点必须至少有一种类型,即标签,但也可以有多种类型。每个标签都有一个对应的集合f 属性,我们称之为schema

如上图所示,有两个tag顶点:玩家和队伍。玩家的schema具有三个属性:ID(vid)、Name(sting)和Age(int); team schema 有两个属性 ID (vid) 和 Name (string)。

与Mysql一样,Nebula Graph是一个强模式数据库,属性的名称和数据类型在数据写入之前就确定了。

在Nebula Graph中,边由类型和边属性组成,Nebula Graph中的边都是有向边,有向边表示一个顶点(起点 src)指向另一个顶点(端点dst)的关联。另外,在 Nebula Graph 中我们将边类型称为 edgetype。每条边只有一个edgetype。每个edgetype都相应地定义了这一点。 架构边缘属性。

回到上面的图例,图中的边有两种类型,一种是player指向player的like关系,属性是likeness(double);另一种是player指向player的like关系,属性是likeness(double);另一个是球员指向球队的发球关系,两个属性是start_year(int)和end_year(int)。

需要注意的是,起点1和终点2之间可以同时存在多条相同或不同类型的边。

图划分

由于超大规模关系网络的节点数量达到数百亿到数千亿,边数达到万亿,即使只存储积分 Bian 和 Bian 也比普通服务器的容量大得多。因此,需要有一种方法来切割图元素并将它们存储在不同的逻辑片partition上。 Nebula Graph 采用边划分。默认分片策略是哈希,分区数量是静态设置的,不能改变。

数据模型DataModel

在 Nebula Graph 中,每个顶点都被建模为一个key-value,根据其顶点 ID (或简称vid)被哈希并存储在相应的分区中。

一条逻辑边在 Nebula Graph 中会被建模为两个独立的key-value,分别称为 out-key键内。 out-key对应这条边的点存储在同一个分区中,in-key和这条边对应的结束点存储在同一个分区中。

系统架构架构

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

存储层Storage

在Nebula Graph中,存储层对应的流程是nebula-storged,其核心基于Raft(共识算法用于管理日志复制的算法)协议的分布式 Key-valueStorage 。目前支持的主要存储引擎有“Rocksdb”和“HBase”。 Raft协议使用leader/follower来维护数据之间的一致性。 Nebula Storage主要增加了以下功能和优化:

并行Raft:允许多台机器上相同的partiton-id组成一个Raft组。通过多个Raft Group实现并发操作。

Write Path & Batch:Raft协议的多台机器之间的同步依赖于日志id的顺序,因此吞吐量throughput较低。通过批量和无序提交可以实现更高的吞吐量。

Learner:基于异步复制的学习器。当一台新机器添加到集群中时,可以先将其标记为学习者,然后从leader/follower异步拉取数据。当学习者追上领导者时,就很重要了被视为追随者并参与 Raft 协议。

负载均衡:对于一些访问压力较大的机器,将其服务的分区迁移到温度较低的机器上,以实现更好的负载均衡。

元数据服务层Metaservice

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

用户管理:Nebula Graph 的用户系统包括 GoduserAdminUserGuest 四种类型。每个用户有不同的操作权限。

集群配置管理:支持在线和离线新建服务器。

图空间管理:添加、删除图空间、修改图空间配置(Raft 副本数量)

Schema 管理:Nebula Graph 是为强 Schema 设计的。

通过Metaservice记录Tag和Edge属性各个字段的类型。支持的类型包括:整数类型、双精度类型double、时间数据类型timestamp、list类型列表等;

多版本管理,支持添加、修改、删除schema,并记录其版本号

p>

TTL管理支持自动通过识别过期和回收生存时间字段来删除数据和空间回收

MetaService 层是一个有状态服务。其状态持久化方式与Storage层相同,通过KVStore进行存储。

计算层查询引擎&查询语言(nGQL)

计算层对应的流程为nebula-graphd,它是由完全点对点、无状态、互不相关的计算节点组成,计算节点之间没有通信。 **Query Engine**层的主要功能是解析客户端发送过来的nGQL文本,通过词法解析Lexer和语法解析Parser生成执行计划,并优化它的执行on plan交给执行引擎,执行引擎通过MetaService获取图点和边的schema,并通过存储引擎层获取点和边数据。 Query Engine层主要优化有:

异步并发执行:由于IO和网络都是长延时操作,所以要进行操作,就需要异步并发操作。另外,为了防止单个长查询影响后续查询,查询引擎为每个查询设置了单独的资源池,以保证服务质量QoS。焦作市中医胃肠医院:https://www.jianshu.com/p/b8966d1a468e

计算下沉:为了避免存储层向计算层传回过多的数据,占用宝贵的带宽、条件过滤 where 等运算符会与查询条件一起发送到存储层节点。

执行计划优化:A虽然关系数据库SQL中的执行计划优化经历了较长时期的发展,但业界对于图查询语言的优化研究较少。 Nebula Graph 对图查询的执行计划优化做了一些探索,包括执行计划缓存和上下文无关语句的并发执行。

客户端API和控制台

Nebula Graph提供C++、Java、Golang三种语言的客户端。与服务器的通信方式是RPC。 ,采用的通信协议是Facebook-Thrift。用户还可以在Linux上通过控制台操作Nebula Graph。 Web 访问目前正在开发中。

以上内容是如何设计图数据库Nebula Graph的数据模型和系统架构。你学到了知识或技能了吗?如果您想学习更多技能或丰富自己的知识库,请关注行业资讯渠道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何设计图数据库Nebula Graph的数据模型和系统架构

用户评论