2015-12-02 54 views
0

我正在使用泰坦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是(种)不在我的线程交易。 如何刷新交易范围,或将我的新节点添加到当前交易?

感谢

回答

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(); 
}