解决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;
相关推荐
银河金融数据库1 小时前
历史分钟高频数据
数据库·金融
男Ren、麦根1 小时前
MySQL 复制与主从架构(Master-Slave)
数据库·mysql·架构
嘉友2 小时前
Redis zset数据结构以及时间复杂度总结(源码)
数据结构·数据库·redis·后端
morganmin3 小时前
(一)MySQL常见疑惑之:select count(*)和select count(1)的区别
数据库·mysql
深圳厨神3 小时前
mysql对表,数据,索引的操作sql
数据库·sql·mysql
谁家有个大人3 小时前
数据分析问题思考路径
数据库·数据分析
小陈又菜4 小时前
MySQL-触发器
数据库·mysql·database·触发器
爱的叹息4 小时前
详解隔离级别(4种),分别用表格展示问题出现的过程及解决办法
数据库·oracle
平凡的小y4 小时前
MySQL内置函数
数据库·mysql
佩奇的技术笔记4 小时前
中级:MyBatis面试题深度剖析
数据库·mybatis