DSE图使用ifnotexist在边上批量写入

时间:2017-05-29 12:06:47

标签: graph datastax-enterprise gremlin datastax-enterprise-graph

我正在使用DSE图从excel加载数据并通过java代码准备addE gremlin查询,最后通过DSE图执行它们。

在当前的测试中,需要使用两个边缘标签激发4,00,000个addE gremlin查询。

1)在几分钟内完成此执行的最佳做法是什么? 现在我将1000批次的gremlin查询给dseSession.executeGraph(新的SimpleGraphStatement("")),导致异常方法代码太大!在groovyjarjarasm.asm.MethodWriter

2)对于此用例中的边标签,我的模式定义为单基数。 还使用自定义顶点id作为顶点。 因此,如果边缘已经存在,那么DSE应该忽略它而没有任何异常吗?

1 个答案:

答案 0 :(得分:1)

查询参数应该是一个如下所示的简单数组:

[[from1, to1, label1], [from2, to2, label2], ...]

然后你的脚本应该是这样的:

for (def triple in arg) {
  def (id1, id2, lbl) = triple
  def v1 = graph.vertices(id1).next()
  def v2 = graph.vertices(id2).next()
  if (!g.V(v1).outE(lbl).filter(inV().is(v2)).hasNext()) {
    v1.addEdge(lbl, v2)
  }
}

可替换地:

for (def triple in arg) {
  def (id1, id2, lbl) = triple
  def v1 = graph.vertices(id1).next()
  if (!g.V(v1).outE(lbl).filter(inV().hasId(id2)).hasNext()) {
    v1.addEdge(lbl, graph.vertices(id2).next())
  }
}

尝试两种变体;其中至少有一个应该胜过任何其他解决方案。