我正在经历这个Titan article。他们在这里谈论Titan图中的交易
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();
答案 0 :(得分: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
在这个问题出现之前,我没有意识到这样的包装是不可能的。