解决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;
相关推荐
这个DBA有点耶4 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G4 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备4 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远4 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安4 天前
MySQL-触发器
数据库·mysql
白远山4 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro4 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
2603_965148114 天前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘