我正在设计一个图形,并查看示例,其中多个顶点将具有类似的标签,例如“用户”等。当知道其唯一值时,可以将其分配给顶点的ID,并将其查找为:
App\EventListener\ProductListener:
tags:
- { name: doctrine.event_subscriber }
或将该唯一值分配为标签,然后以这种方式引用。
g.V('person').has('id','unique-value'). ...
是否有特定原因不使用唯一值(本质上是id)作为标签(例如性能)?最好的策略是什么?
答案 0 :(得分:2)
您的问题和您的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
,而我会继续这样做。
理顺之后,如果您有方便使用hasLabel('person')
的话就无需进行id
的操作,因此上述两个示例返回的值相同,我认为大多数图形数据库都可能优化标签过滤器并仅使用id
进行查找,这样我就不会想象会有性能上的差异,但是出于可读性的考虑,我会坚持只使用V('unique-value')
。
您的问题专门询问了使用唯一标签作为识别顶点的方法,因此我也将解决这个问题。标签并非旨在唯一标识图形元素。它旨在对元素组进行分类。除了该约定外,我认为还有很多技术原因不这样做。某些图形对您可以使用的标签数量有限制,因此根据您的图形提供者可能会出现问题。至少,这样做可以减少代码的可移植性。我认为这会影响性能,因为label
查找的速度将不及id
查找的速度(尤其是您按比例放大图形时)。