NebulaGraph教程 — 第二章 概念简单介绍
- 提示
- 1 图
- 图的构成
- 为什么要使用图数据库
- 2 图数据库【略】
- 3 相关技术【略】
- 4 什么是 NebulaGraph
- 什么是图数据库
- NebulaGraph 的优势
- 适用场景
- 5 数据模型
- ※ NebulaGraph 中没有无向边,只支持有向边。
- 图空间(Space)
- 点(Vertex)
- 边(Edge)
- 标签(Tag)
- 边类型(Edge type)
- 属性(Property)
- ※Tag和Edge type的作用
- 6 路径
- walk
- trail
- path
- 7 点 VID
- 8 服务架构
- 架构总览
- Meta 服务
- Graph 服务
- Storage 服务
提示
主要是对官方文档(3.3.0版本) 简介
章节 知识概念进行提炼总结。
1 图
图的构成
图通常由以下几部分组成:
- 节点,即对象或实体。在本书中,通常简称为点
(Vertex)
。 - 节点之间的关系,在本书中,通常简称为边
(Edge)
。通常边是有方向
或者无方向
的,以表示两个实体之间有持续的关系。
为什么要使用图数据库
虽然关系型数据库(MySQL)
与 XML/JSON
等半结构类型的数据库,都可以用来描述图结构的数据模型。
但是,图(数据库)不仅可以描述图结构与存储数据本身,更着眼于处理数据之间的关联(拓扑)关系。具体来说,图(数据库)有这么几个优点:
- 图是一种更直观、更符合人脑思考直觉的知识表示方式。这使得我们在抽象业务问题时,可以着眼于“业务问题本身”,而不是“如何将问题描述为数据库的某种特定结构(例如表格结构)”。
- 图更容易展现数据的特征,例如转账的路径、近邻的社区。
- 图查询语言是针对图结构访问设计的,可以更加直观。
- 由于存储引擎和查询引擎可以针对图的结构专门设计,图的遍历(对应 SQL 中的 join)要高效得多。
- 图数据库具有广泛的适用场景。例如数据集成(知识图谱)、个性化推荐、欺诈与威胁检测、风险分析与合规、身份(与控制权)验证、IT 基础设施管理、供应链与物流、社交网络研究等。
- 根据文献的统计,使用图技术最多的领域,依次是:信息技术(IT)、学术界研究、金融、工业界实验室、政府、医疗健康、国防、制药业、零售与电子商务、交通运输、电信、保险。
2 图数据库【略】
3 相关技术【略】
4 什么是 NebulaGraph
NebulaGraph
是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
什么是图数据库
图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)
和边(Edge)
,还可以将属性(Property)
附加到点和边上。
NebulaGraph 的优势
- 开源
- 高性能
- 易扩展
- 易开发
- 高可靠访问控制
- 生态多样化
- 兼容 openCypher 查询语言
- 面向未来硬件,读写平衡
- 灵活数据建模
- 广受欢迎
适用场景
- 欺诈检测
- 实时推荐
- 知识图谱
- 社交网络
5 数据模型
参考文档:数据模型 推荐看 官方文档
。
※ NebulaGraph 中没有无向边,只支持有向边。
NebulaGraph
数据模型使用 6 种基本的数据模型。
图空间(Space)
图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。
类似于关系数据库(MySQL)的数据表或者
NameSpace
,因为点的VID在同一图空间中唯一。
点(Vertex)
点用来保存实体对象,特点如下:
- 点是用点标识符
(VID)
标识的。VID
在同一图空间中唯一。VID
是一个int64
,或者fixed_string(N)
。 - 点可以有 0 到多个
Tag
。
边(Edge)
边是用来连接点的,表示两个点之间的关系或行为,特点如下:
- 两点之间可以有多条边。【Rank来区分相同类型边的等级】
- 边是有方向的,不存在无向边。
- 四元组
<起点 VID、Edge type、边排序值 (rank)、终点 VID>
用于唯一标识一条边。边没有 EID。 - 一条边有且仅有一个
Edge type
。 - 一条边有且仅有一个
Rank
,类型为int64
,默认值为0
。
Rank 可以用来区分
Edge type、起始点、目的点都相同的边
。该值完全由用户自己指定。
读取时必须自行取得全部的Rank
值后排序过滤和拼接。
不支持诸如next()
,pre()
,head()
,tail()
,max()
,min()
,lessThan()
,moreThan()
等函数功能,也不能通过创建索引加速访问或者条件过滤。
标签(Tag)
Tag
由一组事先预定义的属性构成。【组内的属性都是相同类型的】
边类型(Edge type)
Edge type
由一组事先预定义的属性构成。【组内的属性都是相同类型的】
属性(Property)
属性是指以键值对(Key-value pair)形式表示的信息。
※Tag和Edge type的作用
Tag
和 Edge type
的作用,类似于关系型数据库中“点表”和“边表”的表结构。
6 路径
参考文档:路径 路径的类型分为三种:walk
、trail
、path
。
walk
walk
类型的路径由有限或无限的边序列构成。遍历时点和边可以重复
。
GO
语句采用的是walk
类型路径。
trail
trail
类型的路径由有限的边序列构成。遍历时只有点可以重复,边不可以重复
。柯尼斯堡七桥问题的路径类型就是trail
。
在 trail
类型中,还有cycle
和circuit
两种特殊的路径类型。
-
cycle
遍历时边不可以重复,起点和终点重复,并且没有其他点重复
。 -
circuit
遍历时边不可以重复,除起点和终点重复外,可能存在其他点重复
。
path
path
类型的路径由有限的边序列构成。遍历时点和边都不可以重复。
7 点 VID
参考文档:点 VID 推荐看 官方文档 。
8 服务架构
架构总览
参考文档:NebulaGraph 架构总览 推荐看 官方文档 。
NebulaGraph 由三种服务构成:Graph
服务、Meta
服务和 Storage
服务,是一种存储与计算分离的架构。
Meta 服务
参考文档:Meta 服务
在 NebulaGraph 架构中,Meta 服务是由 nebula-metad 进程提供的,负责数据管理,例如 Schema 操作、集群管理和用户权限管理等。
Graph 服务
参考文档:Graph 服务
Graph 服务负责处理计算请求,包括解析查询语句、校验语句、生成执行计划以及按照执行计划执行四个大步骤,Graph 服务是由 nebula-graphd 进程提供。
Storage 服务
参考文档:Storage 服务
Storage 服务负责存储数据,Storage 服务是由 nebula-storaged 进程提供。