教程或在线文档中的示例通常使用Gremlin / Groovy shell来演示TitanDB API。 我在普通(旧的,但不是那么老)的Java-8工作,我需要实现的第一件事是向图形添加顶点和边的有效方法。
所以,为了getOrCreate一个带有String标识符的顶点,我做了这个:
private Vertex getOrCreate(TitanGraph g, String vertexId) {
Iterator<Vertex> vertices = g.vertices();
if (!vertices.hasNext()) { // empty graph?
Vertex v = g.addVertex("id", vertexId);
return v;
} else
while (vertices.hasNext()) {
Vertex nextVertex = vertices.next();
if (nextVertex.property("id").equals(vertexId)) {
return nextVertex;
} else {
Vertex v = g.addVertex("id", vertexId);
return v;
}
}
return null;
}
这是TitanDB API提供的最有效的技术吗?
答案 0 :(得分:2)
首先,Gremlin Java和Groovy之间不再存在真正的分离。你可以在两者中同样写出Gremlin。因此,我要说,只需使用Gremlin作为您的getOrCreate
,这可归结为一个基本的内容:
gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).tryNext().orElseGet{graph.addVertex(id, 1)}
==>v[1]
上面的代码是Groovy语法,但Java几乎相同:
g.V(1).tryNext().orElseGet(() -> graph.addVertex(id, 1));
唯一的区别是lambda / closure语法。请注意,在我的情况下,id
是Element
的保留属性 - 它的唯一标识符。您可能会考虑使用其他名称作为&#34;标识符&#34;而不是&#34; id&#34; - 也许&#34; uniqueId&#34;在这种情况下,您的getOrCreate
将如下所示:
private Vertex getOrCreate(TitanGraph graph, String vertexId) {
GraphTraversalSource g = graph.traversal();
return g.V().has("uniqueId", vertexId).tryNext().orElseGet(() -> graph.addVertex("uniqueId", vertexId);
}
如果可以,我还建议您绕过GraphTraversalSource
- 无需使用graph.traversal()
方法一遍又一遍地创建。