Gremlin Vertex ID与标签:优势?

时间:2018-12-08 22:17:03

标签: gremlin

我正在设计一个图形,并查看示例,其中多个顶点将具有类似的标签,例如“用户”等。当知道其唯一值时,可以将其分配给顶点的ID,并将其查找为:

    App\EventListener\ProductListener:
        tags:
            - { name: doctrine.event_subscriber }

或将该唯一值分配为标签,然后以这种方式引用。

g.V('person').has('id','unique-value'). ...

是否有特定原因不使用唯一值(本质上是id)作为标签(例如性能)?最好的策略是什么?

1 个答案:

答案 0 :(得分:2)

您的问题和您的Gremlin示例不太吻合。我认为您的意思是比较:

g.V().hasLabel('person').has(T.id,'unique-value')

g.V('unique-value')

请注意我在第一个Gremlin陈述中的更正。 V()不使用顶点标签作为参数-它只能使用顶点idVertex对象。同样,实际的顶点标识符必须由T.id而不是'id'引用,后者是对用户定义的名为“ id”的属性的引用。 T.id是您从g.V().id()返回的内容。我们经常将T.id简称为id,而我会继续这样做。

理顺之后,如果您有方便使用hasLabel('person')的话就无需进行id的操作,因此上述两个示例返回的值相同,我认为大多数图形数据库都可能优化标签过滤器并仅使用id进行查找,这样我就不会想象会有性能上的差异,但是出于可读性的考虑,我会坚持只使用V('unique-value')

您的问题专门询问了使用唯一标签作为识别顶点的方法,因此我也将解决这个问题。标签并非旨在唯一标识图形元素。它旨在对元素组进行分类。除了该约定外,我认为还有很多技术原因不这样做。某些图形对您可以使用的标签数量有限制,因此根据您的图形提供者可能会出现问题。至少,这样做可以减少代码的可移植性。我认为这会影响性能,因为label查找的速度将不及id查找的速度(尤其是您按比例放大图形时)。