解决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;
相关推荐
大熊猫侯佩36 分钟前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(四)
数据库·swiftui·apple watch
想用offer打牌1 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql
chen.@-@1 小时前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
王小小鸭2 小时前
【Oracle APEX开发小技巧12】
数据库·oracle
噼里啪啦啦.2 小时前
Spring事务和事务传播机制
数据库·sql·spring
搬码红绿灯2 小时前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构
呼拉拉呼拉2 小时前
Redis高可用架构
数据库·redis·架构·高可用架构
却尘2 小时前
当全世界都在用 Rust 重写一切时,Prisma 却选择了反方向
前端·数据库·orm
藥瓿锻2 小时前
2024 CKA题库+详尽解析| 15、备份还原Etcd
linux·运维·数据库·docker·容器·kubernetes·cka
远方16092 小时前
16-Oracle 23 ai-JSON-Relational Duality-知识准备
数据库·oracle·json