There is probably a better way to do this (which I would be happy to know),
but this seems to currently be working for me in a Javascript function
inside OrientDB. I have not yet tried indexing the edges, but I have tried
several variations of Luca's suggestion below, without any luck. I do have
an index on the Id field of each Vertex (every vertex type has an Id field).
function edgeExists(fromId, toId, edgeClassName, fromClassName) {
var result = db.command("select FROM (select
expand(out('"+edgeClassName+"').Id)
from "+fromClassName+" where Id = '"+fromId+"') where value = '"+toId+"'");
if (result.length == 0)
return false;
else
return true;
}
At runtime it expands to this:
select FROM (select expand(out('REL_Account_Company').Id) from Account where
Id = 'd236e1f3-5022-e411-8534-00155d016d32') where value =
'd2b03eae-4c22-e411-8534-00155d016d32'
Always open to suggestions, especially since this will get called a lot.
Patrick
On Thursday, November 6, 2014 at 4:20:09 AM UTC-7, Adithyan K wrote:
>
> I am using OrientDB-2.0-M2 version.
>
> My objective is to identify whether a edge with particular label exists
> between a start vertex and end vertex. I am using the following method for
> that
>
> private boolean existsRelationship(Relationship relationship) throws
> Exception
> {
> OrientVertex start = getVertex(relationship.getStartNodeUniqueKey());
> OrientVertex end = getVertex(relationship.getEndNodeUniqueKey());
> Iterator<Edge> iter = start.getEdges(end,
> com.tinkerpop.blueprints.Direction.OUT, relationship.getType()).iterator();
> return *iter.hasNext();*
> }
> I don't know whether this approach is the efficient way to find edge
> existence.
>
> In this approach, more than 60% of the CPUs time is spend in
> iter.hasNext() method. I am attaching the screenshot here. Pls check.
> Comparing the load of millions of nodes/edges addition, I feel
> iter.hasNext() is tooooo expensive.
>
> My objective is to find only the existence. For that, getting edges may
> not be so efficient, i feel. I am not finding OrientVertex.countEdges()
> method that accepts destination OrientVertex.
>
> *My Points*
>
> 1. Is there any other better way of checking the existence of a edge given
> its startnode, end node and label???
> 2. You can check in the attached screenshot (taken using JMC version 5.4)
> whether this iter.hasNext() can be so expensive?
> 3. If possible, you can give some lazily loadable object in such a way
> that hasNext() just checks the size and current Pointer to return true or
> false
> 4. Is it possible to have OrientVertex.countEdges(OrientVertex
> destination, Direction direction, String... labels)
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.