Массовая вставка или обновление свойства вершины с использованием чертежей -OrientDB
Я использую OrientDB 2.1.4 и blueprints-core-2.6.0.
У меня есть требование обновить значения в существующей вершине или создать новую вершину, если она отсутствует. (ожидается 30 тысяч вершин каждые 45 секунд)
Мой класс вершин: 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);
}
Я пытаюсь проверить, существует ли вершина, если вершина уже существует, я выбрал объект Vertex для дальнейшего обновления, иначе создал новый объект Vertex.
Хотя, это работает, выполнение 30k записей занимает пару минут, а мне нужно добиться того же за 45 секунд.
1 ответ
Попробуйте с UPSERT.
UPSERT обновляет запись, если она уже существует, или вставляет новую запись, если она не существует, все в одном выражении.
g.command(new OCommandSQL("update Device set Name='Device 3',Type='Type 3',ActiveSessionCount=3 upsert where Name='Device 3'' "));
С Уважением,
Микела