Thursday 28 January 2016

how to get existing vertex in orientdb , performance issue

Lets say you have created a class User and created the orient vertex with user id equal to uid.
you have also created the unique index on uid.
Now if you get the vertex using below code ,it will not use index and query will be to slow.
Iterable<Vertex> iterable = graph.getVertices("user.uid",
                    uid);
Iterator<Vertex> iterator = iterable.iterator();

Instead use below code to get orient vertex.which will use index and will give the result fast.
OIndexManager idxManager = graph.getRawGraph().getMetadata().getIndexManager();
        OIndex<?> idx = idxManager.getIndex("uidx");
        OIdentifiable user = (OIdentifiable) idx.get("uid");
        if(null==user){
            return null;
        }
        final ODocument value = ((OIdentifiable) user).getRecord();
        CVertex v = null;
        if (value.getSchemaClass().isSubClassOf(OrientVertex.CLASS_NAME)) {
            // DIRECT VERTEX
            v = new CVertex(graph, value);
        }else{
            return null;
        }
        return v.get();

public class CVertex extends OrientVertex{

    public CVertex(OrientBaseGraph graph, OIdentifiable record) {
        super(graph, record);
        // TODO Auto-generated constructor stub
    }
    public OrientVertex get(){
        return (OrientVertex)this;
    }

}

No comments:

Post a Comment