万亿级图数据库 Nebula Graph 的数据模型和架构设计

图数据库——Nebula Graph安装部署(含示例) 一份Nebula Graph服务的安装部署以及Nebula Graph Studio的安装与使用教程。 阅读详情

640?wx_fmt=png

Nebula Graph 是目前唯一能够存储万亿个带属性的节点和边的在线图数据库。Nebula Graph 不仅能够在高并发场景下满足毫秒级的低时延查询要求,而且能够提供极高的服务可用性和数据安全性。NebulaGraph 也是一个开源的产品,你可以在 GitHub 上查看、分发和贡献代码。


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

有向属性图 DirectedPropertyGraph

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

640?wx_fmt=png


顶点 Vertex

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

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

和 Mysql 一样,Nebula Graph 是一种强 schema 的数据库,属性的名称和数据类型都是在数据写入前确定的。

边 Edge

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

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

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

图分割 GraphPartition

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

640?wx_fmt=png

数据模型 DataModel

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

640?wx_fmt=png

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

640?wx_fmt=png

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

系统架构Architecture

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

640?wx_fmt=png

存储层 Storage

在 Nebula Graph 中存储层对应进程是 nebula-storaged ,其核心为基于 Raft(用来管理日志复制的一致性算法) 协议的分布式 Key-valueStorage 。

目前支持的主要存储引擎为「Rocksdb」和「HBase」。

Raft 协议通过 leader/follower 的方式,来保持数据之间的一致性。Nebula Storage 主要增加了以下功能和优化:

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

  2. Write Path & batch:Raft 协议的多机器间同步依赖于日志 id 顺序性,这样的吞吐量 throughput 较低。通过批量和乱序提交的方式可以实现更高的吞吐量。

  3. Learner:基于异步复制的 learner。当集群中增加新的机器时,可以将其先标记为 learner,并异步从 leader/follower 拉取数据。当该 learner 追上 leader 后,再标记为 follower,参与 Raft 协议。

  4. Load-balance:对于部分访问压力较大的机器,将其所服务的 partition 迁移到较冷的机器上,以实现更好的负载均衡。

640?wx_fmt=png

元数据服务层 Metaservice

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

  1. 用户管理:Nebula Graph 的用户体系包括 Goduser , Admin , User , Guest  四种。每种用户的操作权限不一。

  2. 集群配置管理:支持上线、下线新的服务器。

  3. 图空间管理:增持增加、删除图空间,修改图空间配置(Raft副本数)

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

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

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

    • TTL 管理,通过标识到期回收 time-to-live 字段,支持数据的自动删除和空间回收

MetaService 层为有状态的服务,其状态持久化方法与 Storage 层一样通过 KVStore 方式存储。

640?wx_fmt=png
计算层 Query Engine & Query Language(nGQL)

计算层对应的进程是 nebula-graphd ,它由完全对等无状态无关联的计算节点组成,计算节点之间相互无通信。

Query Engine 层的主要功能,是解析客户端发送 nGQL 文本,通过词法解析 Lexer 和语法解析 Parser 生成执行计划,并通过优化后将执行计划交由执行引擎,执行引擎通过 MetaService 获取图点和边的 schema,并通过存储引擎层获取点和边的数据。

Query Engine 层的主要优化有:

  1. 异步和并发执行:由于 IO 和网络均为长时延操作,需采用异步及并发操作。此外,为避免单个长 query 影响后续 query,Query Engine 为每个 query 设置单独的资源池以保证服务质量 QoS。

  2. 计算下沉:为避免存储层将过多数据回传到计算层占用宝贵的带宽,条件过滤 where 等算子会随查询条件一同下发到存储层节点。

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

640?wx_fmt=png

客户端 API & Console

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

官方小助手

对 Nebula Graph 有任何疑问,欢迎微信 Nebula Graph 小助手:NebulaGraphbot,也欢迎你 star Nebula Graph 的 GitHub (≧▽≦)

640?wx_fmt=png

NebulaGraph】基础入门(一) 是一款开源的图数据库,擅长处理千亿个顶点万亿条边的超大规模数据集。社区已成长为一个荟聚了众多用户、融合了各类图技术场景实践知识的活跃开源社区。你可以在其中与大家共同交流周边生态项目的应用心得,或者社交媒体、实时推荐、网络安全、金融风控、知识图谱、人工智能等大规模生产场景的实践经验。全对称分布式架构存储与计算分离水平可扩展性RAFT 协议下的数据强一致支持 openCypher用户鉴权支持多种类型的图计算算法。 阅读详情

相关推荐

图数据库NebulaGraph

NebulaGraph的图空间彼此之间是完全隔离的,将一个图空间作为工作空间后,您无法访问其他空间。检索新图空间的唯一方法是通过USE语句切换。只有God角色的用户可以执行CREATE SPACE语句。在大型集群中,由于启动时间不同,分片的分布可能不均衡。tag更像是MySQL中的表。边类型更像是MySQL中的表。

午后阳光 1908

图数据库NebulaGraph介绍安装部署

NebulaGraph是一款优秀的国产开源的分布式图数据库, 支持千亿点万亿边规模海量存储,查询可以做到毫秒延迟性能优异。NebulaGraph是一个典型的图数据库,可以高效存储点、边及两者属性,适用的场景包括欺诈监测、实时推荐、知识图谱、社交网络等。

BlogPan的专栏 6624

探索NebulaGraph:一个开源分布式图数据库的技术解析

NebulaGraph是一款开源的分布式图数据库,专注于存储处理大规模图数据。它的主要定位是为了解决图数据存储分析的问题,能够处理节点边数量巨大、结构复杂的图结构数据。NebulaGraph被设计用来应对各种领域的图数据挑战,包括社交网络分析、推荐系统、网络安全监测等。无论是从数据量还是计算复杂度上,NebulaGraph都能够应对各种挑战,为用户提供高效、可靠的图数据存储分析解决方案。

fudaihb的博客 2136

图数据库NebulaGraph简介

NebulaGraph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点万亿条边的超大规模数据集,并且提供毫秒查询。

jueMingc的博客 4758

Nebula Graph开源分布式图数据库,万亿数据,毫秒延时

Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点万亿条边的超大规模数据集,并且提供毫秒查询图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)边(Edge),还可以将属性(Property)附加到点边上图数据库适合存储大多数从现实抽象出的数据类型。

Swayingleaves 1202

Nebula 分布式图数据库介绍

1 什么是图(Graph) 本文介绍的图日常生活中常见的图片有所不同。通常,在英文中,为了区分这两种不同的图,前者会称为 Image,后者称为 Graph。在中文中,前者会强调为“图片”,后者会强调为“拓扑图”、“网络图”等。 一张图(Graph)由一些小圆点(称为顶点或节点,即 Vertex)连接这些圆点的直线或曲线(称为边,即 Edge)组成。“图(Graph)“这一名词最早由西尔维斯特在 1878 年提出。 图还可以分为无向图有向图。 2 什么是图数据库 图数据库是专门存储庞大的图形网络并从

cr7258的博客 9818

作为一个创业团队,Neo4j、Nebula Graph、HugeGraph‌、AllegroGraph‌等几款图数据库哪款更合适?

作为一个创业团队,在选择图数据库时,需要综合考虑性能、成本、易用性、可扩展性以及与业务的贴合程度等多个因素。‌可能是一个更合适的选择。它功能强大、易用性好、社区支持广泛,且社区版本免费。如果团队预计会处理超大规模的图数据,并且有足够的资源来学习使用更复杂的图数据库,那么‌。对于大多数创业团队来说,‌。‌也是一个不错的选择。

skywalk8163的专栏 2523

Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

目录 一、基础概念 二、初步使用 一、基础概念 1、图数据库概念 Nebula Graph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点万亿条边的超大规模数据集,并且提供毫秒查询。 官网:https://nebula-graph.com.cn/ segmentfault:https://segmentfault.com/t/nebula 中文文档:https://docs.nebula-graph.com.cn/3.1.0/1.introduction/2.1.path/ g

xiaosi的博客 6876

亿万图数据库 Nebula Graph数据模型系统架构设计

Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点边的在线图数据库Nebula Graph 不仅能够在高并发场景下满足毫秒的低时...

程序猿DD 1530

探索 Nebula Graph:千亿顶点与万亿边的图数据库解决方案

在数据爆炸的时代,图数据库以其独特的优势在处理复杂关系数据方面展现出强大的能力。今天,我们将深入介绍一款开源图数据库——Nebula Graph,它以其卓越的性能灵活的架构,正成为大数据处理领域的一颗新星。 ## 项目介绍 **Nebula Graph** 是一款开源的图数据库,专为处理超大规模数据集设计。它能够轻松应对千亿个顶点万亿条边的数据规模,同时提供毫秒的查询延迟,是当前市场上唯...

gitblog_00459的博客 756

初探Nebula Graph核心架构设计

Nebula Graph是一款高性能分布式图数据库,专为风控场景中千亿顶点、万亿边的复杂关系网络设计。其核心架构采用存算分离设计,计算层(GraphD)无状态,支持弹性扩展;存储层(StorageD)基于Shared-nothing分布式架构,通过Raft协议保证数据一致性。底层采用RocksDB存储引擎,通过Key编码实现逻辑分片(Partition)与物理存储的映射。该架构支持毫秒多跳查询,一跳查询TP99延迟<5ms,写入速率达20万Records/s。Nebula Graph还提供类SQ

听得到微笑的博客 1513

快速入门nebula graph

nubula graph 是一款开源分布式易拓展的原生图数据库,能够承载数千亿个点万亿条边的超大规模数据集,并且提供毫秒查询。

凌陨心 7298

需要单机还是集群部署_图数据库 Nebula Graph 的安装部署

Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点边的在线图数据库Nebula Graph 不仅能够在高并发场景下满足毫秒的低时延查询要求,还能够实现服务高可用且保障数据安全性。本文目录简介Nebula 整体架构Meta ServiceStorage ServiceGraph Service安装部署单机运行集群部署环境准备安装配置测试集群简介Nebula ...

weixin_39747615的博客 1064

Nebula Graph图数据的安装部署

随着社交、电商、金融、零售、物联网等行业的快速发展,现实社会织起了了一张庞大而复杂的关系网,亟需一种支持海量复杂数据关系运算的数据库即图数据库。本系列文章是学习知识图谱以及图数据库相关的知识梳理与总结 本文会包含如下内容: nebula的介绍 nebula server的安装 nebula console安装 nebulastudio安装 nebulaimporter的安装 本篇文章适合人群:架构师、技术专家、对知识图谱与图数据库感兴趣的高工程师 1.nebula的介绍 官网介绍:...

penriver的博客 2721

AI解码:开源图数据库Nebula Graph解析

AI助程序员快速上手分布式开源图数据库NebulaGraph

limingyu_cn的博客 1490

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

Nebula Graph:一个开源的分布式图数据库。作为唯一能够存储万亿个带属性的节点边的在线图数据库Nebula Graph 不仅能够在高并发场景下满足毫秒的低时延查询要求,而且能够提供极高的服务可用性数据安全性。 本篇主要介绍 Nebula Graph数据模型系统架构设计。 有向属性图 DirectedPropertyGraph Nebula Graph 采用易理解的有向属性...

weixin_44324814的博客 666

图数据库_图数据库 Nebula Graph 是什么

封面图图数据库(英语:Graph Database)是一个使用图结构进行语义查询的数据库。该系统的关键概念是图,形式上是点 (Node 或者 Vertex) 边 (Edge 或者 Relationship) 的集合。一个顶点代表一个实体,比如,某个人,边则表示两个实体间的关联关系,比如 “你关注 Nebula Graph”的关注关系。图广泛存在于现实世界中,从社交网络到风控场景、从知识图谱到智能...

weixin_39528843的博客 467
上一篇: 开源搜索技术的核心引擎 —— Lucene
下一篇: 字节跳动面试题 —— 史莱姆变形计
codehole_
博客等级 码龄7年 33粉丝 132原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值