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.
