前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Nebula Graph 系列(1) —— 初识 Nebula

Nebula Graph 系列(1) —— 初识 Nebula

作者头像
求和小熊猫
发布于 2022-05-07 08:12:18
发布于 2022-05-07 08:12:18
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

初识 Nebula

文章目录

前置知识

什么是 Nebula

Nebula Graph 是一个高性能、可线性扩展、开源的分布式图数据库。Nebula Graph 采用 shared-nothing 分布式架构,企业可针对性对业务进行扩缩容。

什么是图数据库

图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点(Vertex)和边(Edge),还可以将属性(Property)附加到点和边上。

图数据库适合存储大多数从现实抽象出的数据类型。世界上几乎所有领域的事物都有内在联系,像关系型数据库这样的建模系统会提取实体之间的关系,并将关系单独存储到表和列中,而实体的类型和属性存储在其他列甚至其他表中,这使得数据管理费时费力。

Nebula Graph作为一个典型的图数据库,可以将丰富的关系通过边及其类型和属性自然地呈现。

Nebula 的优点

开源 Nebula Graph是在Apache 2.0条款下开发的。越来越多的人,如数据库开发人员、数据科学家、安全专家、算法工程师,都参与到Nebula Graph的设计和开发中来,欢迎访问Nebula Graph GitHub主页参与开源项目。

高性能 基于图数据库的特性使用C++编写的Nebula Graph,可以提供毫秒级查询。众多数据库中,Nebula Graph在图数据服务领域展现了卓越的性能,数据规模越大,Nebula Graph优势就越大。详情请参见Nebula Graph benchmarking页面。

易扩展 Nebula Graph采用shared-nothing架构,支持在不停止数据库服务的情况下扩缩容。

易开发 Nebula Graph提供JavaPython、C++和Go等流行编程语言的客户端,更多客户端仍在开发中。详情请参见Nebula Graph clients。

高可靠访问控制 Nebula Graph支持严格的角色访问控制和LDAP(Lightweight Directory Access Protocol)等外部认证服务,能够有效提高数据安全性。详情请参见验证和授权。

生态多样化 Nebula Graph开放了越来越多的原生工具,例如Nebula Graph Studio、Nebula Console、Nebula Exchange等,更多工具可以查看 生态工具概览。此外,Nebula Graph还具备与Spark、Flink、HBase等产品整合的能力,在这个充满挑战与机遇的时代,大大增强了自身的竞争力。

兼容openCypher查询语言 Nebula Graph 查询语言,简称为 nGQL,是一种声明性的、部分兼容 openCypher 的文本查询语言,易于理解和使用。详细语法请参见nGQL指南。

面向未来硬件,读写平衡 闪存型设备有着极高的性能,并且价格快速下降, Nebula Graph 是一个面向 SSD 设计的产品,相比于基于HDD + 大内存的产品,更适合面向未来的硬件趋势,也更容易做到读写平衡。

灵活数据建模 用户可以轻松地在Nebula Graph中建立数据模型,不必将数据强制转换为关系表。而且可以自由增加、更新和删除属性。详情请参见数据模型。

Nebula 的使用场景

Nebula Graph可用于各种基于图的业务场景。为节约转换各类数据到关系型数据库的时间,以及避免复杂查询,建议使用Nebula Graph。

欺诈检测 金融机构必须仔细研究大量的交易信息,才能检测出潜在的金融欺诈行为,并了解某个欺诈行为和设备的内在关联。这种场景可以通过图来建模,然后借助Nebula Graph,可以很容易地检测出诈骗团伙或其他复杂诈骗行为。

实时推荐 Nebula Graph能够及时处理访问者产生的实时信息,并且精准推送文章、视频、产品和服务。

知识图谱 自然语言可以转化为知识图谱,存储在Nebula Graph中。用自然语言组织的问题可以通过智能问答系统中的语义解析器进行解析并重新组织,然后从知识图谱中检索出问题的可能答案,提供给提问人。

社交网络 人际关系信息是典型的图数据,Nebula Graph可以轻松处理数十亿人和数万亿人际关系的社交网络信息,并在海量并发的情况下,提供快速的好友推荐和工作岗位查询。

Nebula 的安装

二进制压缩包安装

Nebula 的下载网址 https://nebula-graph.com.cn/download/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先进入到需要安装的目录并将压缩包上传至该目录下(我这里默认是 /usr/local 目录下)
cd /usr/local
# 解压 Nebula 压缩包
tar -zxf nebula-graph-2.6.1.el7.x86_64.tar.gz
# 进入该压缩包目录下
cd nebula-graph-2.6.1.el7.x86_64/
# 进入 etc 目录
cd etc/
# 重命名文件
mv nebula-graphd.conf.default nebula-graphd.conf
mv nebula-metad.conf.default nebula-metad.conf
mv nebula-storaged.conf.default nebula-storaged.conf
# 返回上级目录
cd ../
# 在 neubla 安装目录下启动 Neubla 服务
scripts/nebula.service start all
# 本地查看 Neubla 状态
curl -G "http://localhost:19559/stats"
# 关闭 neubla 服务
scripts/nebula.service stop all

然后需要安装 Neubla Console 控制台连接 Neubla Neubla Console 的下载地址 https://github.com/vesoft-inc/nebula-console/releases

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 将下载的 Nebula Colsole 文件上传至 Nebula 的目录下,并且重命名该文件
mv nebula-console-linux-amd64-v2.6.0  nebula-console
# 为 nubula 添加权限
chmod 111 nebula-console
# 使用 nebula-console 连接
./nebula-console -addr 127.0.0.1 -port 9669 -u root -p 123456
# 使用 :exit 或 :quit 命令退出 console 窗口
# 同时也可以使用 nebula 执行脚本文件
./nebula-console -addr 127.0.0.1 -port 9669 -u root -p 123456 -f basketballplayer-2.X.ngql

然后安装 Nebula Graph Studio 可视化界面 Nebula Graph Studio 的下载地址为 https://oss-cdn.nebula-graph.com.cn/nebula-graph-studio/3.1.0/nebula-graph-studio-3.1.0.x86_64.tar.gz Node.js 的下载地址为 https://nodejs.org/en/download/

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 首先进入安装 Nebula Graph Studio 的位置 (这里我默认为 /usr/local 目录),并且将 Nebula Graph  Studio 压缩包目录上传至 目录
cd /usr/local
# 解压 Nebula Graph Studio 压缩包
tar -zxf nebula-graph-studio-3.1.0.x86_64.tar.gz
# 进入 Nebula 解压后的目录
cd nebula-graph-studio/
# 先启动 nebula-http-gateway
nohup nebula-http-gateway/nebula-httpd &
# 安装 losf
 yum install lsof
 # ================安装 Node.js===============
 # 进入 Node.js 的安装目录,并上传 Node.js 的压缩包
 cd /usr/local
 # 解压 Node.js 的压缩包
 tar -xf node-v16.13.0-linux-x64.tar.xz
# 添加环境变量
export PATH=$PATH:/usr/local/node-v16.13.0-linux-x64/bin
# 使环境变量生效
source /etc/profile
# 查看 node 是否安装成功
node -v
# =========================================
# 进入 Nebula Graph Studio 的安装目录
cd /usr/local/nebula-graph-studio/nebula-graph-studio/
# 启动 Nebula Graph Studio 
npm run start

使用 nGql 操作 Nebula

图空间的操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义图数据库,并且设置 顶点的 id  长为 12
CREATE SPACE IF NOT EXISTS demospace (vid_type=fixed_string(32))
# 查看图空间
SHOW SPACES
# 查看图空间的详细信息
describe space kgdata
# 使用图空间
USER SPACES

顶点与边的定义

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义顶点
create tag tag_name (name string,key string,age int);
# 定义边
create edge edge_name (name string,key string,ooid string);
# 建立索引,便于按照属性进行查询
create tag index  tag_name_index_name on tag_name(name(144),age,key(32));
# 查看已经建立的有关于边的索引
show tag indexes;
# 建立边的索引
create edge index if not exists edge_name_index_name on edge_name(name(144),key(32),ooid(32));
# 展示已经建立的有关于边的索引
show edge indexes;
# 重建边的索引
rebuild edge index edge_name_index_name;
# 显示已经定义的顶点类型
show tags
# 显示顶点类型的定义信息
desc tag tag_name
# 修改顶点类型的定义(添加属性)
alter tag tag_name add (color fixed_string(7) );
# 修改顶点类型的定义(修改属性的数据类型)
 alter tag tag_name change (color fixed_string(9));
# 修改顶点类型定义(删除属性)
alter tag tag_name drop (color)
# 删除顶点类型
drop tag if exists tag_name
# 显示所有已经定义的边类型
show edges
# 查看边的定义信息
desc edge edge_name
# 其余与边相关的操作均与对于顶点的操作类似

Ps:

  1. 对于不定长的 String 类型建立索引时需要指定对前多少个字创建索引
  2. 使用复合索引时遵循最左匹配原则
  3. 复合索引不支持跨 edge 和 tag 的索引

Neubla 的数据类型

类型

声明关键字

说明

整数

INT,INT64,INT32,INT16,INT8

64 位整数(INT64)、32 位整数(INT32)、16 位整数(INT16)和 8 位整数(INT8)。

浮点数

FLOAT,DOUBLE

单精度浮点(FLOAT)和双精度浮点(DOUBLE)

布尔

BOOL

可选值为true或false

字符串

STRING,FIXED_STRING

使用关键字STRING声明变长字符串。使用关键字FIXED_STRING(<length>)声明定长字符串,<length>为字符串长度,例如FIXED_STRING(32)

日期时间类型

DATE,TIME,DATETIME,TIMESTAMP

DATE包含日期,但是不包含时间。TIME包含时间,但是不包含日期。DATETIME包含日期和时间。TIMESTAMP包含日期和时间。支持的范围是 UTC 时间的1970-01-01T00:00:01到2262-04-11T23:47:16。

插入顶点和边

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 插入顶点
insert vertex if not exists tag_name(name,key,age) \
values "vertex_id":("vertex_name_1","vertex_key_1",16);
# 插入多个顶点
insert vertex if not exists tag_name(name,key,age) values \
"vertex_src_id":("vertex_src_name","vertex_src_key",15), \
"vertex_tar_id":("vertex_tar_name","vertex_tar_key",19);
# 插入边
insert edge if not exists edge_name(name,key) values \
"vertex_src_id"->"vertex_tar_id"@3:("edge_name_1","edge_key_1");

Ps:

  1. 使用 if not exists 仅检查 vid 和 tag 名称有没有重复,且会影响插入性能
  2. @ 后面是 rank 值,默认为 0

删除顶点和边

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 删除顶点
delete vertex vertex_id
# 删除边
delete edge edge_name "vertex_src_id" -> "vertex_tar_id" @1

查询操作

match 语句(openCypehr 支持)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询所有标签为 tag_name 的顶点
match (m:tag_name) return m;
# 查询 vid 为 "vertex_id" 的顶点
match (m:tag_name) where id(m) == "vertex_id" return m;
# 依据属性查询顶点
 match (m:tag_name{name:"vertex_src_name"}) return m;
 # 匹配查询路径(双向 "--";单向 "-->""<--")
 match p=(m:tag_name)--(n:tag_name) return p
 # 也可写作(与 cypher 语法类似)
  match (m:tag_name)-[p]->(n:tag_name) return p
lookup 语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询所有带标签为 tag_name 的顶点的 vid 和属性
lookup on tag_name yield id(vertex) as vertex_id,properties(vertex);
# 按照属性查询顶点
lookup on tag_name where tag_name.name=="vertex_src_name" yield properties(vertex);
# 依据属性查询边
lookup on edge_name where edge_name.name=="
edge_name_1" yield properties(edge).key as key;
# 查询属性为某几个值
lookup on player where player.age in [45,40,35] yield properties(vertex).name as name,properties(vertex).age as age;
# 设置输出的个数(从第一位开始输出,输出两条记录)
lookup on player where player.age in [45,40,35] yield properties(vertex).name as name,properties(vertex).age as age | limit 0,2;
# 查询并按属性排序
lookup on player where player.age >= 30 yield properties(vertex).name as name,properties(vertex).age as age | order by $-.age desc;
# 使用 group 语句对结果进行分组
lookup on player yield properties(vertex).name as name,properties(vertex).age as age | group by $-.age yield $-.age,count($-.age) as res_num | order by $-.res_num desc | limit 3,7

查询时比较符号参照表

数据类型

符号

描述

字符串

==,<> ,!=

“==”号代表两个字符串相等,“<>” 与“!=”代表不等于

整数,浮点数

==,<,<=,>.>=

如平常代码中的运算符

时间

==,<,<=,>.>=

如平常代码中的运算符

顶点与边的属性

IS NULL, IS NOT NULL, IS EMPTY, IS NOT EMPTY

用于判断属性是否为空,或者是否存在

go 语句(依据路劲查询属性)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从 vid  为 player102 的点出发,并且通过边 server 相连的顶点,并依次输出边的属性,起点 vid,终点 vid,起点属性,终点属性
GO FROM "player102" OVER serve yield properties(edge) as edge_prop ,src(edge) as start_vertex_id ,dst(edge) as end_vertex_id,properties($^) as start_vertex_prop,properties($$) as end_vertex_prop;
# 以 player101 为出发点,经过任意类型的边,且经过 1 - 2 跳,并输出所有边的标签,起点 vid,终点vid
go 1 to 2 steps from "player101" over * 
yield type(edge)as edge_type,src(edge) as start_vertex_id ,dst(edge) as end_vertex_id;
# 由 player100 顶点出发,经过标签为 follow 的边,共两步,并输出边的起点和边的终点,以及终点边的 age 属性。然后将结果按照边的目的顶点进行分组。最后输出边的终点,起点和 age.
GO 2 STEPS FROM "player100" OVER follow 
YIELD src(edge) AS src, dst(edge) AS dst, properties($$).age AS age 
| GROUP BY $-.dst 
YIELD $-.dst AS dst, collect_set($-.src) AS src, collect($-.age) AS age;
fetch 语句(获取指定边或者点的属性值)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#  获取点 player100 的所有属性
FETCH PROP ON player "player100";
# 获取 player100 的 name 属性
FETCH PROP ON player "player100" YIELD properties(vertex).name AS name;
# 获取顶点标签不同,但是顶点 id 相同的两个顶点的属性,并且将结果合并输出
FETCH PROP ON player, t1 "player100";
# 获取任意标签下,id 为 player100, player106, team200 的属性。
FETCH PROP ON * "player100", "player106", "team200";
# 获取连接 player100 和 team204 的边 serve 的所有属性值。 
FETCH PROP ON serve "player100" -> "team204";
# 获取多条边的属性值
FETCH PROP ON serve "player100" -> "team204", "player133" -> "team202";
# 使用 rank  查询(默认会返回 rank 为 0 的边)
FETCH PROP ON serve "player100" -> "team204" @1;

图与路劲的查询

get subgraph 语句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询从点player101开始、0~1 跳、所有边类型的子图。
GET SUBGRAPH 1 STEPS FROM "player101" YIELD VERTICES AS nodes, EDGES AS relationships;
# 查询从点player101开始、0~1 跳、follow类型的入边的子图。
GET SUBGRAPH 1 STEPS FROM "player101" IN follow YIELD VERTICES AS nodes, EDGES AS relationships;
# 查询从点player101开始、0~1 跳、serve类型的出边的子图,同时展示边的属性。
GET SUBGRAPH WITH PROP 1 STEPS FROM "player101" OUT serve YIELD VERTICES AS nodes, EDGES AS relationships;
find path 子句
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 寻找从 player102 到 team204 且经过任意类型的边的最短路径(单方向)
FIND SHORTEST PATH FROM "player102" TO "team204" OVER *;
# 寻找从 team204 到 player100 且经过任意类型的边的最短路径(方向可逆)
FIND SHORTEST PATH WITH PROP FROM "team204" TO "player100" OVER * REVERSELY;
# 寻找从 player100 到 team204 且经过任意类型的边,且如果边为 follow 的话则要求其 degree 不为空,或者其 degree 属性大于零。 
FIND ALL PATH FROM "player100" TO "team204" OVER * WHERE follow.degree is EMPTY or follow.degree >=0;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
跟我学分布式事务之2PC和3PC
在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。
小程故事多
2018/08/22
6010
跟我学分布式事务之2PC和3PC
分布式一致性协议 - 2PC, 3PC
在分布式系统中,每一个机器节点虽然都能明确的知道自己在事务操作中的结果是成功或失败,但无法直接获取其他节点的操作结果。因此在分布式环境中,为了保持事务的ACID特性,就需要增加一个“协调者”来管理其他节点(“参与者”)事务的提交和回滚。基于这个思想,衍生出二阶段提交和三阶段提交两种协议。
并发笔记
2020/10/23
1.1K0
分布式事物(2PC,3PC,CAP,柔性与刚性事物,LCN)
转载自  https://blog.csdn.net/lizhen1114/article/details/80110317
allsmallpig
2021/02/25
5370
分布式事务2PC && 3PC
转载自 https://blog.csdn.net/secretx/article/details/53322989
allsmallpig
2021/02/25
9080
分布式事务之深入理解什么是2PC、3PC及TCC协议?
在上一篇文章《【分布式事务】基于RocketMQ搭建生产级消息集群?》中给大家介绍了基于RocketMQ如何搭建生产级消息集群。因为本系列文章最终的目的是介绍基于RocketMQ的事物消息来解决分布式系统中的数据一致性问题,所以先给大家率先介绍了RocketMQ消息集群的搭建。
用户5927304
2019/07/31
2.4K0
分布式系统的一致性协议之 2PC 和 3PC
在分布式系统领域,有一个理论,对于分布式系统的设计影响非常大,那就是 CAP 理论,即对于一个分布式系统而言,它是无法同时满足 Consistency(强一致性)、Availability(可用性) 和 Partition tolerance(分区容忍性) 这三个条件的,最多只能满足其中两个。但在实际中,由于网络环境是不可信的,所以分区容忍性几乎是必不可选的,设计者基本就是在一致性和可用性之间做选择,当然大部分情况下,大家都会选择牺牲一部分的一致性来保证可用性(可用性较差的系统非常影响用户体验的,但是对另一些场景,比如支付场景,强一致性是必须要满足)。但是分布式系统又无法彻底放弃一致性(Consistency),如果真的放弃一致性,那么就说明这个系统中的数据根本不可信,数据也就没有意义,那么这个系统也就没有任何价值可言。
sunsky
2020/08/20
8300
分布式架构设计篇(五)-刚性事务之2PC详解
​ 分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。
林淮川
2020/06/29
1.8K0
面试被问分布式事务(2PC、3PC、TCC),这样解释没毛病!
还记得刚入行开始写Java时,接触的第一个项目是国家电网的一个业务系统,这个系统据说投资了5亿人民币进行研发,鼎盛时期研发人员一度达到过500人。项目采用当时最流行的ssh(Struts+Spring+Hibernate)框架,典型的三层架构(controller - > service -> dao)简单又粗暴,所有人写的代码都放在一个大工程里,项目文件大小达到几百M,解决代码冲突是当时最大的工作量。
程序员小富
2020/03/11
3.1K0
​浅谈大数据中的 2PC、3PC、Paxos、ZAB
一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的。假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:
sowhat1412
2020/11/05
5990
​浅谈大数据中的 2PC、3PC、Paxos、ZAB
干货分享:分布式场景之刚性事务-2PC详解
分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。
江帅帅
2020/05/20
2560
分布式事务两阶段提交和三阶段提交有什么区别?
在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是 X/Open 公司定义的一套分布式事务标准。
磊哥
2023/07/27
7100
分布式事务两阶段提交和三阶段提交有什么区别?
.Net Core with 微服务 - 分布式事务 - 2PC、3PC
最近比较忙,好久没更新了。这次我们来聊一聊分布式事务。 在微服务体系下,我们的应用被分割成多个服务,每个服务都配置一个数据库。如果我们的服务划分的不够完美,那么为了完成业务会出现非常多的跨库事务。即使按照 DDD 的原则来切分服务还是免不了有的业务场景需要多个业务同时提交成功或者同时回滚的场景。比如会员使用积分下订单这个场景,那么会员服务的积分扣减需要跟订单下单成功同时完成。如果下单成功,但是扣减积分接口失败,那么就会造成数据的不一致性。这个时候我们就需要使用分布式事务来保证数据的一致性。 由于分布式事务要介绍的东西比较多,这一篇只介绍 2PC、3PC 的基本概念,所以 .net 相关的内容大概也只会出现在标题上一次,笑哭。
MJ.Zhou
2021/08/19
5910
.Net Core with 微服务 - 分布式事务 - 2PC、3PC
分布式一致性
在分布式系统的架构设计中,往往需要对可用性和一致性进行权衡,为了解决分布式一致性的问题,诞生了2PC、3PC和Paxos等算法。
shysh95
2019/07/23
5240
浅谈大数据中的 2PC、3PC、Paxos、Raft、ZAB
一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的。假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:
sowhat1412
2020/11/05
1.3K0
浅谈大数据中的 2PC、3PC、Paxos、Raft、ZAB
女朋友问敖丙:什么是分布式事务?
上一篇文章已经讲完分布式了,那暖男说要讲分布式事务那就一定会讲,只是我估计大家没料到暖男这么快就肝好了吧?
敖丙
2020/08/17
4360
女朋友问敖丙:什么是分布式事务?
什么是 “分布式事务” ?
对于分布式事务,相信所有人都应该很了解,为什么会有分布式事务?无论是数据量导致的分库,还是现在微服务盛行的场景都是他出现的原因。
小灰
2021/02/05
9730
什么是 “分布式事务” ?
你还不懂分布式事务吗?
当系统是分布式系统,并且数据库有分库分表的情况下,此时会产生分布式事务相关的问题。
Liusy
2020/08/31
4350
saga分布式事务_本地事务和分布式事务
2PC,两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。
全栈程序员站长
2022/10/05
2.9K0
saga分布式事务_本地事务和分布式事务
我还不懂什么是分布式事务
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。
你呀不牛
2021/05/28
5410
CAP原则和BASE定理
所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。
喝茶去
2019/04/16
1.1K0
CAP原则和BASE定理
相关推荐
跟我学分布式事务之2PC和3PC
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 初识 Nebula
    • 文章目录
    • 前置知识
      • 什么是 Nebula
      • 什么是图数据库
      • Nebula 的优点
      • Nebula 的使用场景
    • Nebula 的安装
      • 二进制压缩包安装
    • 使用 nGql 操作 Nebula
      • 图空间的操作
      • 顶点与边的定义
      • 插入顶点和边
      • 删除顶点和边
      • 查询操作
      • 图与路劲的查询
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档