Java 如何使用多线程创建gremlin边缘

Java 如何使用多线程创建gremlin边缘,java,gremlin,tinkerpop,Java,Gremlin,Tinkerpop,我一直在研究tinkerpop gremlin graph,最近我可以用它执行很多事情,现在我被一个点打动了,我正试图处理数千个顶点和边,完成这个过程大约需要一个小时,我如何将parallelStream()操作应用于以下部分: for(String s : somelist){ String[] ss = s.split(","); graphTraversal().addEdge(ss[0], ss[1]); } “somelist”包含每条边的源顶点和目标顶点的信息(~大小为65

我一直在研究tinkerpop gremlin graph,最近我可以用它执行很多事情,现在我被一个点打动了,我正试图处理数千个顶点和边,完成这个过程大约需要一个小时,我如何将parallelStream()操作应用于以下部分:

for(String s : somelist){
  String[] ss = s.split(",");
  graphTraversal().addEdge(ss[0], ss[1]);
}

“somelist”包含每条边的源顶点和目标顶点的信息(~大小为65000)。

TinkerGraph从技术上讲对于写入来说不是完全线程安全的。您可能会遇到一些问题,具体取决于加载的内容和加载方式。我不能确切地说这些问题是什么,以及您可能需要做些什么来避免它们,但我们肯定没有以这种方式测试TinkerGraph


也就是说,即使是在单线程操作模式下,您在示例代码中指定的65000条边的格式也不需要一个小时就可以加载到TinkerGraph中。听起来有点过分。我假设您的示例代码不是您实际执行的代码,因为这不是有效的Gremlin语法,所以很难说问题出在哪里。

TinkerGraph在技术上对于写入来说不是完全线程安全的。您可能会遇到一些问题,具体取决于加载的内容和加载方式。我不能确切地说这些问题是什么,以及您可能需要做些什么来避免它们,但我们肯定没有以这种方式测试TinkerGraph


也就是说,即使是在单线程操作模式下,您在示例代码中指定的65000条边的格式也不需要一个小时就可以加载到TinkerGraph中。听起来有点过分。我假设您的示例代码不是您实际执行的代码,因为这不是有效的Gremlin语法,所以很难说问题出在哪里。

您使用的是什么图形数据库?TinkerGraph@Stephenmallette您使用的是什么图形数据库?TinkerGraph@Stephenmallette实际上,这只是一个方法调用,该方法执行此操作:-g.V().has(“id”,ss0).out(“Link”).has(“id”,ss1).fold().coalesce(.unfold(),0.addE(“BelongsTo”).from(.V(v4)).to(0.V(v3)).iterate();是否可以用更快的方式完成?是否为顶点在“id”上创建索引?还有…我想你可以从(v4)到(v3)-不需要重新查找那些便宜的顶点,但是你没有任何明显的理由来构造额外的步骤。不,我没有创建索引,我只是利用了gremlin自己创建的默认id,我只关心重复的,这就是为什么我不太关心索引的原因,另外,我也不知道它是否会加快我的程序的速度?
有(“id”,ss0)
不是您根据TinkerGraph创建的默认id查找的方式。在这种情况下,您指的是一个名为“id”的属性。如果您希望通过图形创建标识符,则需要执行
g.V(ss0)
has(id,ss0)
。但是,如果“id”是您指定的属性,则应为其创建索引,否则每次查找都将迭代所有顶点。创建图形时,请创建索引。您没有将
Vertex.class
赋值给“id”,而是说“为名为“id”的属性名的顶点创建索引”-因此方法名为
createIndex()
。实际上,这只是一个方法调用,方法执行此操作:-g.V().has(“id”,ss0)。out(“Link”).has(“id”,ss1)。fold().coalesce(.unfold(),\u0.add(“BelongsTo”).from(.V(v4)).to(u.V(v3)).iterate();可以用更快的方式完成吗?您是否为顶点的“id”创建了索引?另外……我认为您可以执行
from(v4).to(v3)
-不需要重新查找那些便宜的顶点,但你正在构造额外的步骤,没有任何明显的原因。不,我没有创建索引,我只是使用了由gremlin自己创建的默认id,我只关心重复,这就是为什么我不太关心索引的原因,我也不知道它是否会加快我的程序m?
has(“id”,ss0)
不是TinkerGraph创建的默认id的查找方式。在这种情况下,您指的是一个名为“id”的属性。如果您希望由图形创建标识符,则需要执行
g.V(ss0)
has(id,ss0)
。如果“id”“但是,它是您已分配的属性,因此您应该为其创建索引,否则您将为每次查找迭代所有顶点。创建图形时,请创建索引。您没有将
Vertex.class
赋值给“id”,而是说“为名为“id”的属性名的顶点创建索引”-因此方法名为
createIndex()