簡體   English   中英

在Java中將頂點添加到TitanDB圖

[英]Add vertices to TitanDB Graph in Java

教程或在線文檔中的示例經常使用Gremlin / Groovy Shell來演示TitanDB API。 我正在使用普通的(舊的,但還不太舊的)Java-8,而我需要實現的第一件事是一種向圖添加頂點和邊的有效方法。

因此,要使用字符串標識符getOrCreate一個頂點,我這樣做:

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提供的最有效的技術嗎?

首先,Gremlin Java和Groovy之間不再存在真正的分離。 您可以在這兩方面同樣出色地編寫Gremlin。 因此,我想說的是,只需對您的getOrCreate使用Gremlin,這歸結為一個基本的內襯:

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的保留屬性-它是唯一的標識符。 您可能會為“標識符”考慮一個與“ id”不同的名稱-也許是“ uniqueId”,在這種情況下,您的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傳遞GraphTraversalSource無需繼續使用graph.traversal()方法graph.traversal()創建它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM