悬挂边一不小心就会搞错。

  • nebula 版本:2.5
  • 部署方式(分布式 / 单机 / Docker / DBaaS):docker

tag:person(name)
edge:like
我先建了person ,name,like的索引,然后插入好几条tag和edge数据,然后rebuild 索引,然后执行match。点都能按文档里的正常取出,但是edge无法正常取出,全部返回为空

(root@nebula) [test]> match p=(v:person{name:"Bob"})-->(v2:person) return p
+---+
| p |
+---+
+---+
Empty set (time spent 16455/19668 us)

Thu, 16 Sep 2021 18:47:19 CST

(root@nebula) [test]> match p=(v:person)-[e]->(v2:person) return e
+---+
| e |
+---+
+---+
Empty set (time spent 10364/13745 us)

Thu, 16 Sep 2021 18:53:06 CST

我想肯定是哪弄错了,反复插入,重建索引。但都没结果出来 :sneezing_face:
在studio里用图算法能看到生成的两个person之间的like边,为啥match不出来啊

用fetch能发现like边的属性

(root@nebula) [test]> FETCH PROP ON like "Bob"->"Tom"
+----------------------------------------------+
| edges_                                       |
+----------------------------------------------+
| [:like "Bob"->"Tom" @0 {likeness: __NULL__}] |
+----------------------------------------------+
Got 1 rows (time spent 3142/6462 us)

Thu, 16 Sep 2021 19:12:41 CST

lookup看起来正常。。。为什么match不到边啊

(root@nebula) [test]> LOOKUP on like
+--------+---------+---------+
| SrcVID | DstVID  | Ranking |
+--------+---------+---------+
| "Lily" | "Jerry" | 0       |
+--------+---------+---------+
| "Bob"  | "John"  | 0       |
+--------+---------+---------+
| "Bob"  | "Lily"  | 0       |
+--------+---------+---------+
| "Bob"  | "Tom"   | 0       |
+--------+---------+---------+
| "Tom"  | "Jerry" | 0       |
+--------+---------+---------+
Got 5 rows (time spent 6744/9289 us)

Thu, 16 Sep 2021 19:21:01 CST

明白了,一直在插入悬挂边。
建议出个配置项,可以在space里禁用悬挂边。

1 个赞

kv 存储比较难控制悬挂边

@Maverick 悬挂边确实对你们造成一些困扰,我们2.6.0版本也会有功能降低悬挂边的问题,您这边可以就悬挂边这边提个issue吧,以便于后续跟踪和落地

原则上只能在插入时候校验,但是这样肯定会消耗性能,如果对结构性要求高能容忍性能损失,那就搞个开关自己选择。

nodekey 读取是两个随机读