解决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 小时前
MySQL约束条件一览
数据库·mysql
ClouGence3 小时前
数据库变更审批困局,被这个开源工具解决了
数据库·开源
TDengine (老段)4 小时前
TDengine IDMP 十大实用功能(9)
大数据·数据库·人工智能·物联网·时序数据库·tdengine·idmp
starrocks_stella5 小时前
EMR Serverless StarRocks Object Table:用 SQL 连接 OSS 文件与多模态 AI
数据库
这个DBA有点耶5 小时前
以为自增ID只是有空洞?聊聊双主架构下无声的“数据覆盖”
数据库·mysql·dba
钱栈up6 小时前
内网全断,怎么核实高炉和烧结系统的数据库对接信息
数据库
weavecodes6 小时前
双层缓存与权限实时生效:织码在线教育系统的 Caffeine + Redis 设计
数据库
bksczm6 小时前
InnoDB 页结构详解:页类型、页头页尾、数据行与页目录
数据库·mysql
bksczm7 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
字节跳动开源7 小时前
OpenViking连接业务系统,LLM Wiki一键编译
数据库·开源