解决nebula插入头尾节点相同的边数据覆盖问题

文章目录

问题描述

我要在nebula数据库中插入多条头尾节点相同的实体,他们的source和target是相同的,但是Key和其他属性不同。但是我使用如下的insert和upsert语句进行插入数据库后发现数据库中仍然还是只有一条数据。

以下是我插入时用的语句示例:

复制代码
# insert语句
INSERT EDGE `投资` (`_key`,`source`,`target`,`graphlabel`,`投资时间`,`startTime`,`endTime`)  VALUES "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d":("投资@d877937513ffd0023212c5edf179eeea" ,'腾讯' ,'VIPKID大米科技' ,'投资' ,'2018-6-21' ,1529510400 ,1530374400)
INSERT EDGE `投资` (`_key`,`source`,`target`,`graphlabel`,`投资时间`,`startTime`,`endTime`)  VALUES "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d":("投资@a177332e32c0999130ac16dcb1a14aa1" ,'腾讯' ,'VIPKID大米科技' ,'投资' ,'2016-10-8' ,1475856000 ,1476892800)

# upsert语句
UPSERT EDGE ON 投资 "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d"  SET `_key` = '投资@d877937513ffd0023212c5edf179eeea' ,`graphlabel` = '投资' ,`source` = '腾讯' ,`target` = 'VIPKID大米科技' ,`_createdTime` = 1706700065 ,`_updatedTime` = 1706700065 ,`投资时间` = '2018-6-21' ,`startTime` = 1529510400 ,`endTime` = 1530374400;
UPSERT EDGE ON 投资 "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d" SET `_key` = '投资@a177332e32c0999130ac16dcb1a14aa1' ,`graphlabel` = '投资' ,`source` = '腾讯' ,`target` = 'VIPKID大米科技' ,`_createdTime` = 1706700065 ,`_updatedTime` = 1706700065 ,`投资时间` = '2016-10-8' ,`startTime` = 1475856000 ,`endTime` = 1476892800;

解决方法

由于如果数据Key值相同的话我要去更新数据,否则就插入数据,得知我们应该使用upsert语句更符合要求。Upsert语句可以根据一定的条件来决定是插入一条新的记录,还是更新现有的记录。

但是我发现我将两条不同Key值的数据插入后发现还是只有一条数据,也就是说虽然"_key"的值是不同的,但起点和终点是相同的,数据还是无法正常插入进去。

在Nebula中,边是由起点、终点和rank值共同确定的。如果rank值是默认的(即0)那么你将只能有一条从同一个起点到同一个终点的边,即便"_key"值不同。Nebula会认为是同一条边,后面的插入操作就会覆盖前面的边。边的唯一标识是通过起点、终点和rank确定的,而不仅仅是通过起点和终点。所以在插入边的时候,你可以设置不同的 rank值(必须为int类型) 使得Nebula能够区分这两条边:

复制代码
UPSERT EDGE ON 投资 "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d"@1425637  SET `_key` = '投资@d877937513ffd0023212c5edf179eeea' ,`graphlabel` = '投资' ,`source` = '腾讯' ,`target` = 'VIPKID大米科技' ,`_createdTime` = 1706700065 ,`_updatedTime` = 1706700065 ,`投资时间` = '2018-6-21' ,`startTime` = 1529510400 ,`endTime` = 1530374400;
UPSERT EDGE ON 投资 "1977803150186fe4d2a3e226e2869497" -> "b9b48edf95749e6701a93504212a2d1d"@1425622 SET `_key` = '投资@a177332e32c0999130ac16dcb1a14aa1' ,`graphlabel` = '投资' ,`source` = '腾讯' ,`target` = 'VIPKID大米科技' ,`_createdTime` = 1706700065 ,`_updatedTime` = 1706700065 ,`投资时间` = '2016-10-8' ,`startTime` = 1475856000 ,`endTime` = 1476892800;
相关推荐
AnsenZhu10 分钟前
2025年Redis分片存储性能优化指南
数据库·redis·性能优化·分片
oydcm27 分钟前
MySQL数据库概述
数据库·mysql
oioihoii38 分钟前
C++23中if consteval / if not consteval (P1938R3) 详解
java·数据库·c++23
带娃的IT创业者42 分钟前
《AI大模型趣味实战》基于RAG向量数据库的知识库AI问答助手设计与实现
数据库·人工智能
husterlichf2 小时前
MYSQL 常用数值函数 和 条件函数 详解
数据库·sql·mysql
我的golang之路果然有问题2 小时前
快速了解redis,个人笔记
数据库·经验分享·redis·笔记·学习·缓存·内存
卡皮巴拉爱吃小蛋糕2 小时前
MySQL的MVCC【学习笔记】
数据库·笔记·mysql
农民也会写代码2 小时前
dedecms织梦arclist标签noflag属性过滤多个参数
开发语言·数据库·sql·php·dedecms
m0_748232923 小时前
你还在手动画ER图吗?让SQL自动生成ER图,轻松解决作业难题!
数据库·sql·oracle
清流君3 小时前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生