0

我正在尝试将 OrientDB 中的三元组存储为我正在处理的 Java 应用程序中的 Vertex-Edge-Vertex 关系。我对使用 OrientDB 的理解是我可以使用 Tinkerpop API 并实例化这样的图:

OrientGraph graph = new OrientGraph("local:/tmp/orient/test_db");

这就是我实例化图形所做的一切,然后我尝试在这样的循环中连接顶点和边:(注意 aStatement是由主体-关系-对象组成的三元组。)

for (Statement s : statements) {

     Vertex a = graph.addVertex(null);
     Vertex b = graph.addVertex(null);
     a.setProperty("Subject", s.getSubject().toBELShortForm());
     RelationshipType r = s.getRelationshipType();
     if (s.getObject() != null) {
         b.setProperty("Object", s.getObject().toBELShortForm());
         Edge e = graph.addEdge(null, a, b, r.toString());
     }
     else {
         b.setProperty("Object", "null");
         Edge e = graph.addEdge(null, a, b, "no-relationship");
     }

}

然后我循环遍历图形的顶点并将它们打印出来,如下所示:

for (Vertex v : graph.getVertices()) {
     out.println("Vertex: " +v.toString());
}

它确实打印了很多顶点,但是当我通过命令行使用 登录服务器时server.sh,我看到的只是 3 条记录ORole和 4 条记录OUser。我在这里想念什么?因为看起来虽然我的 java 程序运行并完成,但数据并没有被放入数据库。

4

2 回答 2

2

至少就目前而言,答案似乎不是直接使用 Tinkerpop API,而是直接使用 Orient API。这与我对 Tinkerpop 所做的事情相同,但使用的是 OrientDB API。这实际上确实将我的数据存储到数据库中:

for (Statement s : statements) {
            ODocument sNode = db.createVertex();
            sNode.field("Subject", s.getSubject().toBELShortForm());
            sNode.save();

            ODocument oNode = db.createVertex();
            if (s.getObject() != null) {
                oNode.field("Object", s.getObject().toBELShortForm());
                oNode.save();
            }
            else {
                oNode.field("Object", "null");
                oNode.save();
            }

            RelationshipType r = s.getRelationshipType();
            ODocument edge = db.createEdge(sNode, oNode);
            if (r != null) {
                edge.field(r.toString());
                edge.save();
            }
            else {
                edge.field("no relationship");
                edge.save();
            }
}
于 2012-09-13T15:41:16.947 回答
2

在服务器的数据库目录下创建图表。下面的示例假设 OrientDB 已安装在“/usr/local/orient”下:

OrientGraph graph = new OrientGraph("local:/usr/local/orient/databases/test_db");

当您启动 server.sh 时,您应该会发现该数据库已正确填充。

lvc@

于 2012-09-13T22:11:19.373 回答