Titan使用多线程添加顶点

时间:2015-12-02 16:09:53

标签: titan gremlin tinkerpop

我正在使用Titan 1和tinkerpop3以及gremlin。

对于小型工作,我使用基本上正在做的线程:

myNode = g.V().has(somthing)
//some tests
newNode = graph.addVertex(someProperties)
g.V(myNode).addEdge(newNode)

在创建边缘的过程中,我得到了这样的例外: java.lang.IllegalStateException:顶点或类型与此事务无关[v [41025720]]

据我所知,我的newNode是(某种)不在我的线程的事务上。 如何刷新事务范围,或将newnode添加到当前事务中?

由于

1 个答案:

答案 0 :(得分:3)

首先,我建议阅读更详细处理交易的泰坦文档的chapter 9

对于您的特定问题,您需要做的就是创建一个事务并让所有线程都处理该事务。直接从文档中获取您需要的内容:

TitanGraph g = TitanFactory.open(CONFIG);
TransactionalGraph tx = g.newTransaction();
Thread[] threads = new Thread[10];
for (int i=0;i<threads.length;i++) {
    threads[i]=new Thread(new DoSomething(tx));
    threads[i].start();
}
for (int i=0;i<threads.length;i++) threads[i].join();
tx.commit();

这将使所有线程在同一事务上工作,并且可以访问相同的节点和边缘。

如果不这样做,Titan会自动为访问图表的每个不同线程创建一个新事务。这意味着每个线程将使用不同的新节点,边缘等。 。

示例DoSomething

DoSomething(TransactionalGraph tx){
    tx.addVertex();
}