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

fudaihb的博客 2153

图数据库NebulaGraph介绍和安装部署

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

BlogPan的专栏 6681

从零开始:用ADS仿真设计一个2.4GHz Wi-Fi低噪声放大器(含完整电路图)

本文提供了一份详细的ADS软件仿真指南,手把手教你从零开始设计一个2.4GHz Wi-Fi低噪声放大器。内容涵盖核心指标理解、晶体管选型与建模、匹配网络设计、偏置电路集成,并通过S参数仿真、噪声优化及线性度验证等步骤,最终呈现完整的优化电路图,助力射频初学者掌握LNA设计全流程。

weixin_29197835的博客 804

图数据库NebulaGraph简介

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

jueMingc的博客 4777

告别重复劳动:用Python+pywinauto打造你的微信个人助理(自动回复/收款/定时发消息)

本文介绍如何利用Python和pywinauto库构建微信个人助手,实现自动回复、定时消息、智能收款等功能,告别重复劳动。通过详细的代码示例和配置指南,帮助开发者快速掌握微信自动化技术,提升工作效率。

weixin_42568801的博客 328

SpringBoot3.X及SpringAi和jdk17以上版本集成MCP协议供大模型调用sse协议

MCP(Model Context Protocol,模型上下文协议)是由 Anthropic 推出的开源协议,旨在实现大型语言模型(LLM)与外部数据源和工具的无缝集成,用来在大模型和数据源之间建立安全双向的链接。目标是成为 AI 领域的“HTTP 协议”,推动 LLM 应用的标准化和去中心化。本文主要讲解SpringBoot3.X版本和jdk17版本如何集成MCP协议 后续还有一个SpringBoot2.7和jdk1.8通过solon来实现@Service。

weixin_47247523的博客 788

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

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

Swayingleaves 1220

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1884

Nebula 分布式图数据库介绍

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

cr7258的博客 9861

基于YOLOv11的手术器械计数系统:从数据集构建到Web应用部署

m2cai16-tool数据集:包含15种腹腔镜手术器械的标注图像Cholec80数据集:包含80个胆囊切除手术视频,标注了7种器械SurgicalTools数据集:包含超过10,000张手术器械图像,涵盖21类常见器械手术剪(Scissors)止血钳(Hemostat)持针器(Needle Holder)手术刀(Scalpel)镊子(Forceps)拉钩(Retractor)吸引器(Suction)

YOLO 394

工业4.0必备:C#上位机+数字孪生 生产线实时监控与智能预警系统(工业级实战)

数据割裂:PLC、传感器、工业相机的数据散落在不同系统,想看全局生产状态要切换N个软件,“数据孤岛”导致决策滞后;故障难预判:设备突发故障时,只能停机排查,平均故障响应时间超30分钟,一条生产线停工1小时损失超10万;可视化差:传统监控只有冰冷的数字和2D图表,设备运行状态、生产流程、物料流转无法直观感知,新人上手需3个月才能熟悉产线。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 658

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

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

skywalk8163的专栏 2586

晶体管-二极管三极管MOS管选型参数总结

二极管三极管和MOS管,是电路中常用的控制电流电压的基本电子元器件。电路世界中晶体管的选型,需要考虑的参数多种多样,这些参数的选择会直接影响到电路的性能、稳定性、成本等多个方面。本文对二极管三极管和MOS管的选型参数进行详细介绍并总结。

fydar的博客 884

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的博客 6942

直捣黄龙~

这篇文章描述了一个矩阵寻路问题,要求计算从起点到终点的最短路径数量及长度。主要思路是通过BFS算法解决:首先标记哨兵警戒区域为禁区,然后从起点出发进行广度优先搜索,记录每个位置的最短步数和路径条数。当到达终点时,输出路径数和步数;若不可达则返回(0,0)。算法使用队列实现BFS,同时处理路径统计和步数记录,适用于网格寻路类问题。

面试高手的博客 215

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

程序猿DD 1535

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

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

gitblog_00459的博客 757

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

初探Nebula Graph核心架构设计

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

听得到微笑的博客 1553

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

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

weixin_39747615的博客 1078

快速入门nebula graph

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

凌陨心 7324

Nebula Graph图数据的安装部署

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

penriver的博客 2749

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

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

limingyu_cn的博客 1502

图数据库 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的博客 469
上一篇: 开源搜索技术的核心引擎 —— Lucene
下一篇: 字节跳动面试题 —— 史莱姆变形计
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值