我正在使用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添加到当前事务中?
由于
答案 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();
}