2014-02-09 4 views
2

Я проходил через это Titan article. Здесь они говорят о сделке в Titan графаTitan Graph DB: обработка транзакций в IdGraph

Vertex v1 = g.addVertex(null); 
//Do many other things 
TransactionalGraph tx = g.newTransaction(); 
Vertex v2 = tx.addVertex(null); 
v2.setProperty("uniqueName","foo"); 
tx.commit(); 
g.addEdge(null,v1,g.getVertex(v2),"related"); //Need to load v2 into outer transaction 
//Do many other things 
g.commit(); // Likely to fail due to lock congestion 

Это нормально, если я использую TitanGraph, но как я должен обрабатывать транзакции при использовании IdGraph? Должен ли я сделать что-то вроде:

// baseGraph is TitanGraph, g is IdGraph 

    TransactionalGraph tx = baseGraph.newTransaction(); 
    Vertex v = g.addVertex(pageId); 

    v.setProperty("prop1",  prop1); 
    v.setProperty("prop2",  prop2); 
    v.setProperty("prop3",  prop3); 

    tx.commit(); 

    .....create some edges here 

    g.commit(); 

ответ

4

Интересный вопрос. Если бы я делал это, мой инстинкт должен был бы использовать baseGraph, чтобы начать новую транзакцию, затем обернуть созданный tx в IdGraph следующим образом:

// baseGraph is TitanGraph, g is IdGraph 
TransactionalGraph tx = baseGraph.newTransaction(); 
IdGraph txId = new IdGraph(tx); 
Vertex v = txId.addVertex(pageId); 

v.setProperty("prop1",  prop1); 
v.setProperty("prop2",  prop2); 
v.setProperty("prop3",  prop3); 

txId.commit(); 

.....create some edges here using txId 

txId.commit(); 

Обертывание baseGraph в IdGraph только украшает g с этой функцией. Поскольку tx - это «новый» экземпляр графа, его тоже нужно обернуть, чтобы украсить функции IdGraph. Обратите внимание, что приведенный выше код не будет работать, пока эта проблема не будет решена:

https://github.com/thinkaurelius/titan/issues/592

Я не понимал, что такая упаковка не представлялось возможным, пока этот вопрос не взошло.

+0

Эй, @stephen Я ждал тебя, мужчина. Я знал, что ты ответишь. Очень мало пользователей интересует такой красивый DB Titan на SO. Ну, я также делаю то же самое «baseGraph», чтобы начать новую транзакцию, и внутри этой транзакции я выполняю всю операцию «IDgraph». правильно? – manish

+0

Я сделал свой ответ более конкретным. –

+0

где находится 'tx.commit()' ??? Я думаю, что первый 'txId.commit();' должен быть 'tx.commit()' – manish

Смежные вопросы