Оптимизация транзакций Orientdb

Я работаю над REST API. У меня все проблемы с транзакциями в Orientdb. В текущей настройке у нас есть синглтон, который обтекает ODatabaseDocumentPool. Мы извлекаем все экземпляры с помощью этой настройки. Каждый вызов api начинается с приобретения экземпляра из пула и создания нового экземпляра OrientGraph с использованием экземпляра ODatabaseDocumentTx. В следующем коде используются методы из ODatabaseDocumentTx и OrientGraph. В конце кода мы вызываем graph.commit() для операций записи и graph.shutdown() для всех операций.

У меня есть список вопросов.

  • Чтобы проверить, я все еще могу использовать экземпляр ODatabaseDocumentTx, который я использовал для создания OrientGraph? Или я должен использовать OrientGraph.getRawGraph()?

  • Как лучше всего использовать операции чтения при использовании OrientGraph? Даже во время операций чтения я получаю исключения OConcurrentModificationExceptions, исключения блокировки или ошибки при получении записей. Это потому, что OrientGraph является транзакционным, а версии изменены даже при получении записей? Следует отметить, что я также использую диспетчер индексов и перебираю через ребра вершины в этих операциях чтения.

  • Когда я получаю запись через Index Manager, обновляет ли она версию в базе данных?

  • Вернул ли graph.shutdown() экземпляр ODatabaseDocumentTx в пул?

  • Требуется ли v1.78 блокировать записи в транзакциях?

  • Если для параметра autoStartTx установлено значение false на OrientGraph, мне нужно начинать транзакции вручную или автоматически запускаться при доступе к базе данных?

Пример кода:

ODatabaseDocumentTx db = pool.acquire();

//                READ

OrientGraph graph = new OrientGraph(db);

ODocument doc = (ODocument) oidentifialbe.getRecord() // I use Java API to a get record from index

if( ((String) doc.field("field")).equals('name') )
     //code

OrientVertex v = graph.getVertex(doc);

for(OrientVertex vv : v.getVertices()) {
      //code
}

//               OR WRITE

doc.field('d',val);
doc = doc.save();
OrientVertex v = v.getVertex(doc);
graph.addEdge(null, v, otherVertex);
graph.addEdge(null, v, anotherVertex) // do I have to reload the record in v?

//              End Transaction

// if write
graph.commit();

// then
graph.shutdown();