java - 在 Java 中向 TitanDB Graph 添加顶点

标签 java api titan

教程或在线文档中的示例通常使用 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。因此,我想说,只需使用 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 的保留属性 - 它是唯一标识符。您可能会考虑为“标识符”使用与“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 - 无需使用 graph.traversal() 方法一遍又一遍地创建它。

关于java - 在 Java 中向 TitanDB Graph 添加顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33827685/

相关文章:

java - JFrame 关闭时外部应用程序关闭

java - 如何将其他类添加到 Arquillian 部署存档中?

java - 在ubuntu上运行java文件时出现NoClassDefFoundError

mysql - 在 "external"数据库上创建帐户

titan - 检查 Gremlin/TitanDB 中的顶点属性等效性

java - 使用 Tinkerpop 的 g.V() 时,TitanDB 是否会将完整图加载到内存中?

java - 如何使用 Testng 框架将放心的控制台日志写入可编辑或 txt 文件?

Android 4.0 - API 级别 14 与谷歌 API(谷歌公司)- API 级别 14 : What is the difference?

security - API 安全 - 发送 CC 信息

hadoop - Titan Hadoop-Gremlin 配置问题