格莱姆林顶点 ID 与标签:有何优势?

4

我正在设计一张图表,看到有些顶点会有相似的标签,比如“用户”等。当知道其唯一值时,可以将其分配给顶点的ID,并按以下方式查找:

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

或者将该唯一值分配为标签,并以此方式引用它。
g.V('unique-value'). ...

为什么不使用唯一值(即ID)作为标签,例如性能方面的考虑?这种情况下最好的策略是什么?

1个回答

9

您的问题和您的 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,并且我将继续这样做。
有了这个搞清楚了,如果您已经拥有 id,那么就没有必要执行 hasLabel('person'),因此上面两个示例将返回相同的值,我认为大多数图形数据库可能会优化掉标签过滤器,并仅使用 id 进行查找,因此我不认为您会看到性能差异,但出于可读性考虑,我建议只使用 V('unique-value')
您的问题特别询问了使用唯一标签作为识别顶点的方法,因此我也会解决这个问题。标签不是用于唯一标识图元素的。它用于对元素进行分类。除此之外,我认为有很多技术上的原因不这样做。一些图形具有标签数量限制,因此这可能是一个问题,具体取决于您的图形提供程序。至少,这样做会降低您代码的可移植性。我认为它会影响性能,因为 label 查找不会像 id 查找那样快(特别是当您将图形扩大时)。

看来我的语法确实有误,我想我看了太多的.addV('label-name')示例。谢谢! - ndrix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接