仅在存在“从”和“到”顶点时创建顶点

问题描述

我想在一个查询中创建1000多个Edge。 当前,我正在使用AWS Neptune数据库和gremlin.net来创建它。 我面临的问题与速度有关。由于HTTP请求,因此花费了大量时间。 因此,我计划将所有查询组合成一个字符串,并一次性执行。

_g.AddE("allow").From(_g.V().HasLabel('person').Has('name','name1')).To(_g.V().HasLabel('phone').Where(__.Out().Has('sensor','nfc'))).Next();

“至” (目标)顶点有可能在数据库中不可用。在这种情况下,此查询也会失败。因此,在使用hasNext()执行此查询之前,我必须检查该顶点是否存在。

因此,到目前为止,它可以正常工作,但是当我考虑一次合并所有1000多个边创建时,是否有可能编写一个 “ To”时不会中断的查询 (目标)找不到顶点?

解决方法

您应该考虑对每个顶点使用Element Existence pattern,如TinkerPop食谱所示。

在您的示例中,您将替换查询的这一部分:

_g.V().HasLabel('person').Has('name','name1')

具有类似的内容(我没有.NET环境来测试语法):

__.V().Has('person','name','name1').Fold().
coalesce(__.Unfold(),__.AddV('person').Property('name','name1')

这将充当Upsert,并返回现有顶点或添加具有name属性的新顶点。然后可以在“至”步骤上使用相同的图案,以确保在创建边之前也存在该图案。