Titan 使用多线程添加顶点
Titan adding vertex using multi-threads
我正在使用带有 tinkerpop3 和 gremlin 的 Titan 1。
对于小型工作,我使用的线程基本上是在做:
myNode = g.V().has(somthing)
//some tests
newNode = graph.addVertex(someProperties)
g.V(myNode).addEdge(newNode)
在创建边的过程中我得到了这个异常:
java.lang.IllegalStateException: 顶点或类型与此事务无关 [v[41025720]]
我知道我的新节点(有点)不在我线程的事务上。
如何刷新交易范围,或者将我的新节点添加到当前交易中?
谢谢
首先,我建议阅读 chapter 9 更详细地处理事务的 titan 文档。
对于您的特定问题,您需要做的就是创建一个事务并让所有线程处理该事务。直接从文档中获取您需要的是:
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();
}
我正在使用带有 tinkerpop3 和 gremlin 的 Titan 1。
对于小型工作,我使用的线程基本上是在做:
myNode = g.V().has(somthing)
//some tests
newNode = graph.addVertex(someProperties)
g.V(myNode).addEdge(newNode)
在创建边的过程中我得到了这个异常: java.lang.IllegalStateException: 顶点或类型与此事务无关 [v[41025720]]
我知道我的新节点(有点)不在我线程的事务上。 如何刷新交易范围,或者将我的新节点添加到当前交易中?
谢谢
首先,我建议阅读 chapter 9 更详细地处理事务的 titan 文档。
对于您的特定问题,您需要做的就是创建一个事务并让所有线程处理该事务。直接从文档中获取您需要的是:
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();
}