关于vid的使用

同一个图空间的vid要求唯一,但是不同vertex的业务ID是可能相同的,比如studentId=1,teacherId=1,以此作为各自点的vid,查询或者关联边都不能唯一,有什么好的方式吗?当前是计划加前缀或后缀

开始试用 - Nebula Graph Database 手册

可以看下上面的基础概念哈,我讲下我的理解,不知道你学过 MySQL 没有,VID 对应的 SQL 里 key 的概念,所以要唯一,但是你这里的 studentId / teacherId 其实是一个 Student 实例中的 No. 的属性,对应到 Nebula 中就是 Vertex tag 的概念,tag 的值是可以重复的,就像你 No. 的属性值可以重复一样,要保证不重复的唯一标识 VID (key)是独一无二的就行啦。

1赞

抱歉,我没说清楚我的意思。

比如:

CREATE SPACE my_space(vid_type = INT64);
USE SPACE my_space;
create tag teacher(name string);
create tag student(name string);
insert vertex teacher(name) values 1:('teacher1');
insert vertex student(name) values 1:('student1');

在同一个space内,我希望以teacherId(1)和studentId(1)直接作为teacher和student各自顶点的vid,而不只是tag内的一个属性。
这样的话我就不用为teacherId和studentId设置index,再用look up先查出各自顶点的vid,再进行insert edge或者其他需要vid的操作。

实操这种东西啊,我找个人来给你解答下 @jerry.liang

因为在一个图空间内,vid必须是唯一的,所以无法做到同一个id,表征两个不同的点,因为我们点本身是不区分类型的(teacher 和 student),当然我们一个点可以有多个tag(既可以是student,也可以是teacher)。

所以,基于你的场景需求,目前如果你想实现以 teacher(1) 和 student(1) 作为各自的定点vid的话,那么建议你把space图空间的 vidType 设置为fix_string类型,注意指定好长度,直接用 teacher(1) 、student(1) 作为vid(就像你前面说的加前缀或后缀)。

注意:上面vidType支持string类型的前提是使用nebula 2.0版本,1.0的话,你只能做hash了

3赞

对,用前缀或者后缀

浙ICP备20010487号