DSE 图在边上使用 ifnotexist 批量写入
DSE graph Batch write with ifnotexist on edges
我正在使用 DSE 图从 excel 加载数据并通过 java 代码准备 addE gremlin 查询,最后在 DSE 图上执行它们。
在当前测试中,需要触发 4,00,000 个带有两个边缘标签的 addE gremlin 查询。
1) 在几分钟内完成此执行的最佳做法是什么?
现在我在 1000 批次中向 dseSession.executeGraph(new SimpleGraphStatement("")) 提供 gremlin 查询,这导致异常方法代码太大!在 groovyjarjarasm.asm.MethodWriter
2) 对于此用例中的边缘标签,我的架构定义为单一基数。
还为顶点使用自定义顶点 ID。
因此,如果边缘已经存在,那么 DSE 应该毫无例外地忽略它?
查询参数应该是一个简单的数组,如下所示:
[[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())
}
}
尝试两种变体;其中至少一个应该优于任何其他解决方案。
我正在使用 DSE 图从 excel 加载数据并通过 java 代码准备 addE gremlin 查询,最后在 DSE 图上执行它们。
在当前测试中,需要触发 4,00,000 个带有两个边缘标签的 addE gremlin 查询。
1) 在几分钟内完成此执行的最佳做法是什么? 现在我在 1000 批次中向 dseSession.executeGraph(new SimpleGraphStatement("")) 提供 gremlin 查询,这导致异常方法代码太大!在 groovyjarjarasm.asm.MethodWriter
2) 对于此用例中的边缘标签,我的架构定义为单一基数。 还为顶点使用自定义顶点 ID。 因此,如果边缘已经存在,那么 DSE 应该毫无例外地忽略它?
查询参数应该是一个简单的数组,如下所示:
[[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())
}
}
尝试两种变体;其中至少一个应该优于任何其他解决方案。