我正在使用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秒内完成相同的操作。
答案 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