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