使用蓝图-OrientDB批量插入或更新顶点属性

时间:2015-11-03 10:58:38

标签: orientdb tinkerpop-blueprint

我正在使用OrientDB 2.1.4和blueprints-core-2.6.0。

我需要更新现有Vertex上的值或创建新Vertex(如果不存在)。 (每45秒预计30k个顶点)

我的顶点类是:Device(Name,Type,ActiveSessionCount) - 每个Device的“Name”是一个唯一的实体。

如果设备存在,需要在设备上更新ActiveSessionCount,否则创建一个新的设备顶点。

if (graph.getVertices(keyName, key).iterator().hasNext()) {
    vertex = (OrientVertex) graph.getVertices(keyName, key).iterator().next();
} else {
    vertex = graph.addVertex(className, attributeName, key);
}

我正在尝试检查顶点是否存在,如果顶点已经存在,我已经获取了Vertex对象以进行进一步更新,否则创建了一个新的顶点对象。

虽然这很有效,但是执行30k记录需要花费几分钟时间,而我需要在45秒内完成相同的操作。

1 个答案:

答案 0 :(得分:1)

尝试使用UPSERT。

如果记录已经存在,UPSERT会更新记录,如果没有,则会在单个语句中更新新记录。

g.command(new OCommandSQL("update Device set Name='Device 3',Type='Type 3',ActiveSessionCount=3  upsert where Name='Device 3'' "));

此致

MICHELA