我正在设计一个图形,并查看几个顶点将具有相似标签的示例,例如“user”等 . 当知道其唯一值时,可以将其分配给顶点的id,并将其查找为:
g.V('person').has('id','unique-value'). ...
或者将该唯一值指定为标签,并以此方式引用它 .
g.V('unique-value'). ...
是否有特殊原因不使用唯一值(基本上是id)作为标签,例如性能?对此最好的策略是什么?
你的问题和你的Gremlin例子并不完全一致 . 我认为你的意思是比较:
g.V().hasLabel('person').has(T.id,'unique-value')
和
g.V('unique-value')
请注意我在第一个Gremlin声明中的更正 . V() 不将顶点标签作为参数 - 它只能采用顶点 id 或 Vertex 对象 . 此外,实际的顶点标识符必须由 T.id 而不是 'id' 引用,后者是对名为"id"的用户定义属性的引用 . T.id 是您从 g.V().id() 返回的内容 . 我们经常将 T.id 称为 id ,我将继续这样做 .
V()
id
Vertex
T.id
'id'
g.V().id()
如果你有 id 方便,那就没有必要做 hasLabel('person') 所以上面的两个例子返回相同的值,我认为大多数图形数据库可能会优化掉标签过滤器而只需使用 id 他们的查找所以我不会看到性能上的差异,但出于可读性目的,我坚持只使用 V('unique-value') .
hasLabel('person')
V('unique-value')
您的问题特别询问使用唯一标签作为识别顶点的方法,因此我也将解决这个问题 . 标签不用于图元素的唯一标识 . 它旨在对元素组进行分类 . 除了这个惯例,我认为有许多技术原因不这样做 . 某些图表对您可以拥有的标签数量有限制,因此可能会出现问题,具体取决于您的图表提供程序 . 至少,通过这样做可以降低代码的可移植性 . 我认为它会影响性能,因为 label 查找不会像 id 查找一样快(特别是当您缩放图表时) .
label
1 回答
你的问题和你的Gremlin例子并不完全一致 . 我认为你的意思是比较:
和
请注意我在第一个Gremlin声明中的更正 .
V()
不将顶点标签作为参数 - 它只能采用顶点id
或Vertex
对象 . 此外,实际的顶点标识符必须由T.id
而不是'id'
引用,后者是对名为"id"的用户定义属性的引用 .T.id
是您从g.V().id()
返回的内容 . 我们经常将T.id
称为id
,我将继续这样做 .如果你有
id
方便,那就没有必要做hasLabel('person')
所以上面的两个例子返回相同的值,我认为大多数图形数据库可能会优化掉标签过滤器而只需使用id
他们的查找所以我不会看到性能上的差异,但出于可读性目的,我坚持只使用V('unique-value')
.您的问题特别询问使用唯一标签作为识别顶点的方法,因此我也将解决这个问题 . 标签不用于图元素的唯一标识 . 它旨在对元素组进行分类 . 除了这个惯例,我认为有许多技术原因不这样做 . 某些图表对您可以拥有的标签数量有限制,因此可能会出现问题,具体取决于您的图表提供程序 . 至少,通过这样做可以降低代码的可移植性 . 我认为它会影响性能,因为
label
查找不会像id
查找一样快(特别是当您缩放图表时) .