gremlin - 仅当“from”和“to”顶点存在时才创建顶点
问题描述
我想在单个查询中创建 1000 多个边。目前,我正在使用 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();
“To” (目标)顶点可能在数据库中不可用。在这种情况下,此查询也会失败。因此,在使用 hasNext() 执行此查询之前,我必须检查该顶点是否存在。
所以到目前为止它工作正常,但是当我考虑一次组合所有 1000+ 边缘创建时,是否可以编写一个不会中断的查询,如果找不到“To”(目标)顶点?
解决方案
您应该查看对每个顶点使用元素存在模式,如 TinkerPop 食谱中所示。
在您的示例中,您将替换查询的这一部分:
_g.V().HasLabel('person').Has('name', 'name1')
像这样(我没有.NET环境来测试语法):
__.V().Has('person', 'name', 'name1').Fold().
coalesce(__.Unfold(), __.AddV('person').Property('name', 'name1')
这将充当 Upsert 并返回现有顶点或添加具有 name 属性的新顶点。然后可以在 To 步骤中使用相同的模式,以确保它在创建边缘之前就存在。
推荐阅读
- ionic2 - 商米V1设备的pdf打印输出
- jquery - easyautocomplete - 在新选项卡中打开链接
- java - 当用户离开和回来时,我如何保留我的 JavaBean?
- php - 计算非按位运算符的步骤
- html - 测量网格宽度
- hex - 了解原始 8 位 8000Hz PCM 正弦波的十六进制输出
- android - 使用 Firebase 中的两组数据填充 RecyclerView
- r - 如何在给定字符串处分隔数据文件中的列?
- php - 数组中的 div 回显多次出现
- google-cloud-platform - 嵌入式实体和使用 GCP 数据存储上的祖先路径的实体之间的区别