Update时报边不存在,Match/Look up/Fetch却能查到边

  • nebula 版本:3.4.1

  • 部署方式: 分布式

  • 安装方式:源码编译

  • 是否上生产环境:Y

  • 硬件信息
    单机磁盘 两块3.84T SSD盘做RAID1做数据目录 。单机数据目录为3.84/2=1.92T
    单机CPU:104C 512G
    6台物理机

  • 问题的具体描述
    在update边语句时报

Storage Error:Vertex or edge not found.

但用Match/Fetch/Lookup on语句都找得到边,且起点终点rank值都是一致的。

  • Graphd日志显示
Storage Error:Vertex or edge not found.update edge on has_telephone "a"->"b" @5917083198248365971 set tel_relation_type="个人手机”
  • 执行upsert后再执行update,却能成功update
upsert edge on has_telephone "a"->"b" @5917083198248365971 set tel_relation_type="个人手机”
update edge on has_telephone "a"->"b" @5917083198248365971 set tel_relation_type="个人手机”

upsert 成功后再 update 肯定可以成功,因为upset 的逻辑 是有的化更新,没有的话就 insert

至于第一次 update 没有成功,但 lookup和 match 却有值,能否看下你的 match/lookup 语句?

Match:

match (a:person)-[e:has_telephone]->(b:telephone)
where id(a)=='a' and  id(b)=='b'
return a,e,b

LookUp:

lookup on has_telephone where has_telephone.edge_uid=='3d6d332817' YIELD edge as e

两个语句返回的e中src,dst,rank都和update语句中完全一致,但在update时却抛边不存在异常。

你查的那条边可能是悬挂边,点不存在不影响边的查找

3.4.1版本中文档说Match语句现在查询不到悬挂边,现在结果查询得到,所以应该不是悬挂边?而且在Nebula中起点和终点的顶点都是存在的。

那也可能是 rank 的原因,存在同一个起始终止点,但是rank不同的边,你的查询语句里并没有带 rank 的查询所以我猜有可能是这个原因

通过Match和lookup都查过了,查询出来rank是完全一致的。

方便且不涉及敏感数据的话,能把查询过程以及查询结果都贴上吗?这个感觉很不应该。
我理解是必现的?

我们的业务场景是每天有通过Spark离线批量导入和Flink实时写入。Graphd的日志里经常会刷出类似边不存在的错误,通过nebula-studio用MATCH/Look up/Fetch都能查到边。
因为所在行业和数据比较敏感,不能完整将查询结果贴上,抱歉。但出现的边不存在异常都是上面提到的update语句导致的。