2

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

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

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

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

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

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

虽然,这行得通,但执行 30k 条记录需要几分钟,而我需要在 45 秒内完成。

4

1 回答 1

1

尝试使用 UPSERT。

如果记录已经存在,UPSERT 会更新记录,如果不存在则插入新记录,所有这些都在单个语句中。

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

问候,

米凯拉

于 2015-11-04T09:24:38.053 回答