[英]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語法。 請注意,在我的情況下, id
是Element
的保留屬性-它是唯一的標識符。 您可能會為“標識符”考慮一個與“ 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.