Граф DSE Пакетная запись с ifnotexist по краям

Я использую график DSE для загрузки данных из Excel и готовлю запросы addE gremlin через код Java и, наконец, выполняю их через график DSE.

В текущем тестировании нужно запустить 4 000 000 запросов addE gremlin с двумя метками ребер.

1) Как лучше всего закончить выполнение за несколько минут? Прямо сейчас я даю гремлиновым запросам в 1000 пакетов к dseSession.executeGraph(new SimpleGraphStatement("")), что приводит к слишком большому коду метода исключения! at groovyjarjarasm.asm.MethodWriter

2) Для меток ребер в этом сценарии использования моя схема определена как единичная мощность. Также используя собственные идентификаторы вершин для вершин. Таким образом, если ребро уже существует, DSE должно просто игнорировать его без каких-либо исключений?

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())
  }
}

Попробуйте оба варианта; по крайней мере, один из них должен превзойти любое другое решение.

Другие вопросы по тегам