Titan Graph DB:处理IdGraph中的事务

时间:2014-02-09 11:59:13

标签: graph-databases titan

我正在经历这个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();

1 个答案:

答案 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

在这个问题出现之前,我没有意识到这样的包装是不可能的。