当前位置:   article > 正文

Nebula Graph-01-Nebula Graph简介和安装以及客户端连接_nebulagraph

nebulagraph

前言

系列文章:
Nebula Graph-01-Nebula Graph简介和安装以及客户端连接
Nebula Graph-02-NebulaGraph高阶配置、用户管理、日志
Nebula Graph-03-NebulaGraph Studio-可视化web工具安装和使用
Nebula Graph-04-NebulaGraph nGQL的介绍和使用
Nebula Graph-05-NebulaGraph nGQL和SQL区别
Nebula Graph-06-NebulaGraph Java 使用 和SpringBoot集成Nebula Graph


NoSQL 数据库

图数据库并不是可以克服关系型数据库缺点的唯一替代方案。现在市面上还有很多非关系型数据库的产品,这些产品都可以叫做 NoSQL。NoSQL 一词最早于上世纪 90 年代末提出,可以解释为“非 SQL” 或“不仅是 SQL”,具体解释要根据语境判断。为便于理解,这里 NoSQL 可以解释成 “非关系型数据库”。不同于关系型数据库,NoSQL 数据库提供的数据存储、检索机制并不是基于表关系建模的。 NoSQL 数据库可以分为四类:

  • 键值存储(key-value stores)
  • 列式存储(column-family stores)
  • 文件存储(document stores)
  • 图数据库(graph databases)

下面将分别介绍这四类数据库。

  • 键值存储
    键值存储,顾名思义,就是使用键值对存储数据的数据库。不同于关系型数据库,键值存储是没有表和列的。如果一定要做类比,键值数据库本身就像一张有很多列(也就是键)的大表。在键值存储数据库中,数据(即键值对中的值)都是通过键来存储和查询的,通常用哈希列表来实现。这比传统的 SQL 数据库要简单得多,而且对于某些 web 应用来说,这就足够了。

    键值模型对于 IT 系统来说优势在于简单、易部署。多数情况下,这种存储方式对非关联的数据很适用。如是只是存储数据而无需查询的话,使用这种存储方法就没有问题。但是如果 DBA 只对部分值进行查询或更新的时候,键值模型就显得效率低下了。常见的键值存储数据库有:Redis、Voldemort、Oracle BDB。

  • 列式存储
    NoSQL 数据库的列式存储与 NoSQL 数据库的键值存储有许多相似之处,因为列式存储仍然在使用键进行存储和检索。区别在于列式存储数据库中,列是最小的存储单元,每一列均由键、值以及用于版本控制和冲突解决的时间戳组成。这在分布式扩展时特别有用,因为在数据库更新时,可以使用时间戳定位过期数据。由于列式存储良好的扩展性,因此适用于非常大的数据集。常见的列式存储数据库有:HBase、Cassandra、HadoopDB 等。

  • 文档存储
    准确来说,NoSQL 数据库文档存储实际上也是基于键值的数据库,只不过对功能做了增强。数据仍然以键值的形式存储,但是文档存储中的值是结构化的文档,而不仅仅是一个字符串或单个值。也就是说,由于信息结构的增加,文档存储能够执行更优化的查询,并且使数据检索更加容易。因此,文档存储特别适合存储、索引并管理面向文档的数据或者类似的半结构化数据。

    从技术上讲,作为一个半结构化的信息单元,文档存储中的文档可以是任何形式可用的文档,包括 XML、JOSN、YAML 等,这取决于数据库供应商的设计。 比如,JSON 就是一种常见的选择。虽然 JSON 不是结构化数据的最佳选择,但是 JSON 型的数据在前端和后端应用中都可以使用。常见的文档存储数据库有:MongoDB、CouchDB、Terrastore 等。

  • 图存储
    最后一类 NoSQL 数据库是图数据库。本书重点讨论的 NebulaGraph 也是一种图数据库。虽然同为 NoSQL 型数据库,但是图数据库与上述 NoSQL 数据库有本质上的差异。图数据库以点、边、属性的形式存储数据。其优点在于灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱。我们将在随后的章节中详细讨论图数据库。不过在本章中,你只要知道图数据库是一种 NoSQL 类型的数据库就可以了。常见的图数据库有:NebulaGraph、Neo4j、OrientDB 等。

为什么要有图数据库

虽然关系型数据库(MySQL)与 XML/JSON 等半结构类型的数据库,都可以用来描述图结构的数据模型。

但是,图(数据库)不仅可以描述图结构与存储数据本身,更着眼于处理数据之间的关联(拓扑)关系。具体来说,图(数据库)有这么几个优点:

  • 图是一种更直观、更符合人脑思考直觉的知识表示方式。这使得我们在抽象业务问题时,可以着眼于“业务问题本身”,而不是“如何将问题描述为数据库的某种特定结构(例如表格结构)”。
  • 图更容易展现数据的特征,例如转账的路径、近邻的社区。
  • 图查询语言是针对图结构访问设计的,可以更加直观。
  • 由于存储引擎和查询引擎可以针对图的结构专门设计,图的遍历(对应 SQL 中的 join)要高效得多。
  • 图数据库具有广泛的适用场景。例如数据集成(知识图谱)、个性化推荐、欺诈与威胁检测、风险分析与合规、身份(与控制权)验证、IT 基础设施管理、供应链与物流、社交网络研究等。
  • 根据文献的统计,使用图技术最多的领域,依次是:信息技术(IT)、学术界研究、金融、工业界实验室、政府、医疗健康、国防、制药业、零售与电子商务、交通运输、电信、保险。

  图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是以图论为基础的,
图数据库主要用于存储更多的连接数据.

  图论〔Graph Theory〕是数学的一个分支。它以图为研究对象图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。

分析市面上主流图数据库

https://blog.csdn.net/Castlehe/article/details/121602870

Nebula Graph 介绍

1:Nebula Graph 简介

官网:https://docs.nebula-graph.com.cn/3.6.0/
NebulaGraph 是一款开源的、分布式的、易扩展的原生图数据库,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。
NebulaGraph 的优势

  • 开源
  • 高性能
  • 易扩展
  • 易开发
  • 高可靠访问控制
  • 生态多样化
  • 兼容 openCypher 查询语言
  • 面向未来硬件,读写平衡
  • 灵活数据建模
  • 广受欢迎(我觉得就是因为开源-免费的)

适用场景

  • 欺诈检测
  • 实时推荐
  • 知识图谱
  • 社交网络
    在这里插入图片描述

2:Nebula Graph 数据类型

NebulaGraph 数据模型使用 6 种基本的数据模型:

图空间(Space)

图空间用于隔离不同团队或者项目的数据。不同图空间的数据是相互隔离的,可以指定不同的存储副本数、权限、分片等。

点(Vertex)

点用来保存实体对象,特点如下:

  • 点是用点标识符(VID)标识的。VID在同一图空间中唯一。VID 是一个 int64,或者 fixed_string(N)。
  • 点可以有 0 到多个 Tag。(ebulaGraph 2.x 及以下版本中的点必须包含至少一个 Tag。)

边(Edge)

边是用来连接点的,表示两个点之间的关系或行为,特点如下:

  • 两点之间可以有多条边。
  • 边是有方向的,不存在无向边。
  • 四元组 <起点 VID、Edge type、边排序值 (rank)、终点 VID> 用于唯一标识一条边。边没有 EID。
  • 一条边有且仅有一个 Edge type。
  • 一条边有且仅有一个 Rank,类型为 int64,默认值为 0。Rank 可以用来区分 Edge type、起始点、目的点都相同的边。该值完全由用户自己指定。

标签(Tag)

Tag 由一组事先预定义的属性构成。

边类型(Edge type)

Edge type 由一组事先预定义的属性构成。

属性(Property)

属性是指以键值对(Key-value pair)形式表示的信息。

3:路径

图论中一个非常重要的概念是路径,路径是指一个有限或无限的边序列,这些边连接着一系列的点。
既连接图论中点和边的任意连接方式
路径的类型分为三种:walk、trail、path

walk

walk类型的路径由有限或无限的边序列构成。遍历时点和边可以重复。

trail

trail类型的路径由有限的边序列构成。遍历时只有点可以重复,边不可以重复。

在 trail 类型中,还有cycle和circuit两种特殊的路径类型,以下图为例对这两种特殊的路径类型进行介绍。
在这里插入图片描述

  • cycle
    cycle 是封闭的 trail 类型的路径,遍历时边不可以重复,起点和终点重复,并且没有其他点重复。在此示例图中,最长路径由三条边组成:A->B->C->A或C->D->E->C
  • circuit
    circuit 也是封闭的 trail 类型的路径,遍历时边不可以重复,除起点和终点重复外,可能存在其他点重复。在此示例图中,最长路径为:A->B->C->D->E->C->A。

path

path类型的路径由有限的边序列构成。遍历时点和边都不可以重复。

walk、trail、path 总结对比

在这里插入图片描述

NebulaGraph 服务架构

NebulaGraph 架构总览

NebulaGraph 由三种服务构成:Graph 服务、Meta 服务和 Storage 服务,是一种存储与计算分离的架构。

每个服务都有可执行的二进制文件和对应进程,用户可以使用这些二进制文件在一个或多个计算机上部署 NebulaGraph 集群。

下图展示了 NebulaGraph 集群的经典架构。
在这里插入图片描述
如果这个看着比较乱,可以看这个:
在这里插入图片描述
简单来说:

  • Meta 服务是由 nebula-metad 进程提供的,负责元数据管理,例如 Schema 操作、集群管理和用户权限管理等。默认启动端口为:9559
  • Graph 服务是由 nebula-graphd 进程提供,Graph 服务负责处理计算请求,既用户的query引擎,默认启动端口为:9669
  • Storage 服务是由 nebula-storaged 进程提供,Storage 服务负责存储数据,默认启动端口为:9779

Meta 服务架构:默认启动端口为:9559

官网介绍:https://docs.nebula-graph.com.cn/3.6.0/1.introduction/3.nebula-graph-architecture/2.meta-service/

Meta 服务是由 nebula-metad 进程提供的,用户可以根据场景配置 nebula-metad 进程数量,
所有 nebula-metad 进程构成了基于 Raft 协议的集群,其中一个进程是 leader,其他进程都是 follower,leader 是由多数派选举出来,只有 leader 能够对客户端或其他组件提供服务,其他 follower 作为候补,如果 leader 出现故障,会在所有 follower 中选举出新的 leader。

Meta 服务功能:

  • 管理用户账号
  • 管理分片
  • 管理图空间
  • 管理 Schema 信息
  • 管理 TTL 信息(服务存储 TTL(Time To Live))
  • 管理作业

Graph 服务:默认启动端口为:9669

官网介绍:https://docs.nebula-graph.com.cn/3.6.0/1.introduction/3.nebula-graph-architecture/3.graph-service/

Graph 服务主要负责处理查询请求,包括解析查询语句、校验语句、生成执行计划以及按照执行计划执行四个大步骤,
在这里插入图片描述
查询请求发送到 Graph 服务后,会由如下模块依次处理:

  • Parser:词法语法解析模块。
  • Validator:语义校验模块。
  • Planner:执行计划与优化器模块。
  • Executor:执行引擎模块。

注:不论是nebula 的客户端连接服务还是java等代码连接服务,都要连接9669端口

Storage 服务:默认启动端口为:9779

官网介绍:https://docs.nebula-graph.com.cn/3.6.0/1.introduction/3.nebula-graph-architecture/4.storage-service/

NebulaGraph 的存储包含两个部分,一个是 Meta 相关的存储,称为 Meta 服务,在前文已有介绍。
另一个是具体数据相关的存储,称为 Storage 服务。其运行在 nebula-storaged 进程中。
优势

  • 高性能(自研 KVStore)
  • 易水平扩展(Shared-nothing 架构,不依赖 NAS 等硬件设备)
  • 强一致性(Raft)
  • 高可用性(Raft)
  • 支持向第三方系统进行同步(例如全文索引)

Nebula Graph 本地化安装部署

部署选择参考:
在这里插入图片描述

官方说明:https://docs.nebula-graph.com.cn/3.6.0/2.quick-start/3.quick-start-on-premise/2.install-nebula-graph/

部署Nebula Graph 的方法有太多种,目前只在此演示本地部署安装。其他Docker Desktop或者Docker Compose的方式,请大家参考官网基于 Docker 快速部署

1:安装 NebulaGraph

RPM 和 DEB 是 Linux 系统下常见的两种安装包格式;

1:利用weget下载安装包

当前仅支持在 Linux 系统下安装 NebulaGraph,且仅支持 CentOS 7.x、CentOS 8.x、Ubuntu 16.04、Ubuntu 18.04、Ubuntu 20.04 操作系统。
URL 格式如下:

//Centos 7
https://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el7.x86_64.rpm

//Centos 8
https://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.el8.x86_64.rpm

//Ubuntu 1604
https://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1604.amd64.deb

//Ubuntu 1804
https://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu1804.amd64.deb

//Ubuntu 2004
https://oss-cdn.nebula-graph.com.cn/package/<release_version>/nebula-graph-<release_version>.ubuntu2004.amd64.deb
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

例如要下载适用于Centos 7.5的3.6.0安装包:

wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.el7.x86_64.rpm

wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.el7.x86_64.rpm.sha256sum.txt

下载适用于ubuntu 1804的3.6.0安装包:

wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.ubuntu1804.amd64.deb

wget https://oss-cdn.nebula-graph.com.cn/package/3.6.0/nebula-graph-3.6.0.ubuntu1804.amd64.deb.sha256sum.txt

我这里下载Centos 7.5的3.6.0安装包
在这里插入图片描述

2:安装 NebulaGraph

安装 RPM 包

$ sudo rpm -ivh --prefix=<installation_path> <package_name>
–prefix为可选项,用于指定安装路径。如不设置,系统会将 NebulaGraph 安装到默认路径/usr/local/nebula/。

例如,要在默认路径下安装3.6.0版本的 RPM 包,运行如下命令:
sudo rpm -ivh nebula-graph-3.6.0.el7.x86_64.rpm

安装 DEB 包

$ sudo dpkg -i <package_name>
使用 DEB 包安装 NebulaGraph 时不支持自定义安装路径。默认安装路径为/usr/local/nebula/。
例如安装3.6.0版本的 DEB 包:
sudo dpkg -i nebula-graph-3.6.0.ubuntu1804.amd64.deb

2:启动 NebulaGraph 服务

使用脚本nebula.service管理服务,包括启动、停止、重启、中止和查看。

$ sudo /usr/local/nebula/scripts/nebula.service
[-v] [-c <config_file_path>]
<start | stop | restart | kill | status>
<metad | graphd | storaged | all>
在这里插入图片描述
例如:

* 启动服务:

sudo /usr/local/nebula/scripts/nebula.service start all

* 停止服务:

sudo /usr/local/nebula/scripts/nebula.service stop all

* 查看服务:

sudo /usr/local/nebula/scripts/nebula.service status all

如果返回类似如下结果,表示 NebulaGraph 服务异常,可以根据异常服务信息进一步排查

[INFO] nebula-metad: Running as 25600, Listening on 9559
[INFO] nebula-graphd: Exited
[INFO] nebula-storaged: Running as 25646, Listening on 9779

我这里进行查看,发现:
在这里插入图片描述
这是因为:
从 3.0.0 版本开始,在配置文件中添加的 Storage 主机无法直接读写,配置文件的作用仅仅是将 Storage 主机注册至 Meta 服务中。必须使用ADD HOSTS命令后,才能正常读写 Storage 主机。而我这里是最新的3.6.0,这个问题放在第4步【4:注册 Storage 服务】解决

3:连接 NebulaGraph 服务-原生命令行客户端 NebulaGraph Console 连接

本文介绍如何使用原生命令行客户端 NebulaGraph Console 连接 NebulaGraph 。
因为:首次连接到 NebulaGraph 后,必须先注册 Storage 服务,才能正常查询数据。

NebulaGraph 支持多种类型的客户端,包括命令行客户端、可视化界面客户端和流行编程语言客户端。

  • NebulaGraph Console:原生 CLI 客户端
  • NebulaGraph CPP:C++ 客户端
  • NebulaGraph Java:Java 客户端
  • NebulaGraph Python:Python 客户端
  • NebulaGraph Go:Go 客户端
    前提条件
  • NebulaGraph 服务已启动。
  • 运行 Nebula Console 的机器和运行 NebulaGraph 的服务器网络互通。
  • Nebula Console 的版本兼容 NebulaGraph 的版本。

1:在 Nebula Console 下载页面,确认需要的版本,单击 Assets。【建议选择最新版本】
在这里插入图片描述
2:(可选)为方便使用,重命名文件为nebula-console。【在 Windows 系统中,请重命名为nebula-console.exe。】

3:在运行 Nebula Console 的机器上执行如下命令,为用户授予 nebula-console 文件的执行权限。【Windows 系统请跳过此步骤。】

chmod 111 nebula-console

4:在命令行界面中,切换工作目录至 nebula-console 文件所在目录。
5:执行如下命令连接 NebulaGraph。

#Linux 或 macOS
./nebula-console -addr -port -u -p
[-t 120] [-e “nGQL_statement” | -f filename.nGQL]

#Windows
nebula-console.exe -addr -port -u -p
[-t 120] [-e “nGQL_statement” | -f filename.nGQL]

示例:

nebula-console.exe -addr 192.168.13.10 -port 9669 -u root -p 12345

连接成功的标识:

在这里插入图片描述
6:退出控制台
你可以使用 或断开与 NebulaGraph 的连接。为方便起见,nebula-console 支持使用这些不带冒号 (“:”) 的小写命令,例如 .[:EXIT] [:QUIT] [quit]

nebula> :QUIT

Bye root!

nebula> :EXIT

Bye root!

nebula> quit

Bye root!

nebula> exit

Bye root!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4:注册 Storage 服务

注:从 3.0.0 版本开始,在配置文件中添加的 Storage 主机无法直接读写,配置文件的作用仅仅是将 Storage 主机注册至 Meta 服务中。必须使用ADD HOSTS命令后,才能正常读写 Storage 主机。如果你是2.x 的就可以忽略了;
首次连接到 NebulaGraph 后,需要先添加 Storage 主机,并确认主机都处于在线状态。

前提条件
已连接 NebulaGraph 服务。

1:添加 Storage 主机。

执行如下命令添加主机:ADD HOSTS : [,: …];

示例:
ADD HOSTS 127.0.0.1:9779;
在这里插入图片描述

2:检查主机状态,确认全部在线。

SHOW HOSTS;
在这里插入图片描述

5:再次检查Nebula Graph 成功启动标志

在这里插入图片描述

END
到此NebulaGraph 的简介和安装已经完成,下节讲解Nebula Graph-02-NebulaGraph高阶配置、用户管理、日志

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/571488
推荐阅读
相关标签
  

闽ICP备14008679号