Hi Nick,
can you explain your domain in terms of a graph? Like:

A ---> B <---- C

And where you start and what you want to get back?

Lvc@



On 24 January 2014 22:00, Nick Bauer <[email protected]> wrote:

> We are using OrientDB 1.6.4.
>
> We have a graph with 3 classes of vertices: A, B, and C
> Class A has a medium multiplicity (tens of thousands of vertices)
> Class B has a high multiplicity (hundreds of thousands of vertices)
> Class C has a low multiplicity (a few vertices)
>
> We have also defined an edge class, D, which is used to link vertices of
> all three classes.
>
> Every instance of class B is linked to at least one instance of A and at
> least one instance of C.  Also, the links from the B instances are fairly
> evenly distributed among all of the A instances and among all of the C
> instances.
>
> Thus, there are a relatively small number of B instances linked to any
> single A instance.  There are a much higher number of B instances linked to
> any single C instance.
>
> We want to find all instances of class B that are linked to at least one A
> instance that has a certain field value and that are also linked to at
> least one instance of C that has a certain field value.
>
>
> We can solve half of the problem with a query like this, which traverses
> from the A instances that match the condition, and finds all of the B
> instances linked to them:
> select * from (traverse out from (traverse in_D from (select * from A
> where aField = 'a456') )) where @class = 'B'
>
> This query quickly returns a relatively small number of B instances to
> work with, so it seems beneficial to start there.  However,
> from there, we can continue to traverse out to the C instances linked to
> those B instances, but it seems like if we do that, we lose the ability to
> further filter out those B instances based on the C instances they link to.
>
> Is there a way to filter the B instances based on the C instances they
> link to, without traversing to the C instances themselves?
>
> We have also found that this query works, but given the high multiplicity
> of class B, it seems to take a very long time (around 10 minutes) to run:
> select from B where ((out_D traverse(0,1) (@class = 'C' and cField =
> 'c123')) and (out_D traverse(0,1) (@class = 'A' and aField = 'a456')))
>
> Is there a better way to query for vertices based on their links to
> multiple collections of vertices?
>
> --
>
> ---
> 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/groups/opt_out.
>

-- 

--- 
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/groups/opt_out.

Reply via email to