OrientDB — проблема с хранением данных из Java-приложения

Я пытаюсь сохранить триплеты внутри OrientDB как отношения Vertex-Edge-Vertex внутри приложения Java, над которым я работаю. Мое понимание использования OrientDB заключается в том, что я могу использовать API Tinkerpop и создать экземпляр графика следующим образом:

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

Это действительно все, что я делаю для создания экземпляра графа, затем я пытаюсь соединить вершины с ребрами в петле, подобной этой: (Обратите внимание, что Statement — это тройка, состоящая из субъект-отношение-объект.)

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-программа запускается и завершается, данные не помещаются в базу данных.


person Houdini    schedule 13.09.2012    source источник
comment
Почему за это проголосовали?   -  person Houdini    schedule 04.05.2013


Ответы (2)


Ответ, по крайней мере, на данный момент, кажется, заключается не в использовании API Tinkerpop, а в непосредственном использовании 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();
            }
}
person Houdini    schedule 13.09.2012

Создайте график в каталоге баз данных сервера. Ниже приведен пример, предполагающий, что OrientDB был установлен в «/usr/local/orient»:

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

Когда вы запустите server.sh, вы должны найти эту базу данных правильно заполненной.

Lvc@

person Lvca    schedule 13.09.2012