使用Java将顶点添加到TitanDB Graph

时间:2015-11-20 13:16:54

标签: java api titan

教程或在线文档中的示例通常使用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提供的最有效的技术吗?

1 个答案:

答案 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语法。请注意,在我的情况下,idElement的保留属性 - 它的唯一标识符。您可能会考虑使用其他名称作为&#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()方法一遍又一遍地创建。