首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Neptune和Gremlin的缓慢插入

使用Neptune和Gremlin的缓慢插入
EN

Stack Overflow用户
提问于 2022-03-02 13:54:03
回答 1查看 218关注 0票数 0

我对使用gremlin到海王星的插入有问题。我试图插入许多节点和边,可能有数十万个节点和边,并检查是否存在

目前,我们正在使用inject插入节点,问题是是

运行explain命令后,我们发现问题是合并和步骤--运行时间的99.9%以上。

只有当每个节点和边缘不存在时,我才希望插入它,这就是为什么我要使用合并和步骤。

例如,用于插入具有inject的节点的查询:

代码语言:javascript
复制
properties_list = [{‘uid’:’1642’},{‘uid’:’1322’}…]
g.inject(properties_list).unfold().as_('node')
  .sideEffect(__.V().where(P.eq('node')).by(‘uid).fold()
  .coalesce(__.unfold(), __.addV(label).property(Cardinality.single,'uid','1')))

对于图中的1000个节点和具有100个元素的properties_list,运行上面的查询大约需要30秒,并且随着图中节点数的增加,运行速度会变慢。

使用与上面的查询相同的环境运行一个朴素的注入,没有的合并在一起,只需不到1秒。我想听听您的建议,并知道插入许多节点和边的最佳实践是什么(检查是否存在)。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2022-03-02 15:21:27

如果您有一组要检查是否存在的If,则可以通过只向查询提供一个If列表并计算预先存在的If的交集来显著加快查询速度。然后,在计算了需要更新的集合之后,您可以一次性应用它们。这将产生很大的影响。您遇到问题的原因是中期遍历V有很多工作要做。一般来说,最好使用实际的UID,而不是属性(在您的例子中是UID)。如果这不是一个选项,同样的技术将适用于基于属性的ID。这些步骤是:

  1. 使用injectsideEffect将要查找的ID作为一个列表插入,并在单独的地图中有条件地应用包含更改的相应映射。
  2. 找到存在的和不存在的更改的交集。
  3. 使用该组不存在的ID,使用集合中的值应用更新以索引到地图中。

<代码>g 210

下面是一个具体的例子。我使用了图表记事本,但是您可以在代码中做同样的事情:

给予:

代码语言:javascript
复制
ids = "['1','2','9998','9999']"

代码语言:javascript
复制
data = "[['id':'1','value':'XYZ'],['id':'9998','value':'ABC'],['id':'9999','value':'DEF']]"

我们可以这样做:

代码语言:javascript
复制
g.V().hasId(${ids}).id().fold().as('exist').
      constant(${data}).
      unfold().as('d').
      where(without('exist')).by('id').by()

它正确地找到不存在的:

代码语言:javascript
复制
{'id': 9998, 'value': 'ABC'}
{'id': 9999, 'value': 'DEF'}

您可以使用此模式更有效地构造条件插入(我希望:-)。因此,要添加新的顶点,您可以这样做:

代码语言:javascript
复制
g.V().hasId(${ids}).id().fold().as('exist').
      constant(${data}).
      unfold().as('d').
      where(without('exist')).by('id').by().
      addV('test').
        property(id,select('d').select('id')).
        property('value',select('d').select('value'))

v[9998]
v[9999]

顺便提一下,我们在Gremlin-mergeVmergeE中增加了两个新的步骤,这样可以更容易地以更声明的方式完成这一任务。这些新步骤应该是TinkerPop 3.6版本的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71323900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档