2010-06-02 18 views

Odpowiedz

4

W wielu przypadkach struktura domeny może zostać wykorzystana do poprawy wydajności. Załóżmy, że wiesz, że generalnie Twoje jednostki A mają mniej relacji x w porównaniu do liczby relacji y w jednostkach B. Następnie możesz przejść przez dwa etapy z węzła A i zobaczyć, gdzie pojawia się węzeł B, i odfiltrować węzły C w ten sposób. Oto kod dla tego podejścia:

Set<Node> found = new HashSet<Node>(); 
for (Relationship firstRel : a1.getRelationships(Reltypes.x, Direction.OUTGOING)) 
{ 
    Node cNode = firstRel.getEndNode(); 
    for (Relationship secondRel : cNode.getRelationships(Reltypes.y, Direction.INCOMING)) 
    { 
     Node bNode = secondRel.getStartNode(); 
     if (bNode.equals(b1)) 
     { 
      found.add(cNode); 
      break; 
     } 
    } 
} 

Innym sposobem byłoby uruchomienie dwóch wątków, które skanują relacje z obu stron.

Trzecim podejściem byłoby stworzenie wyspecjalizowanego indeksu, który pomógłby w odpowiadanie na tego typu zapytania, co oczywiście zaszkodziłoby wydajności wkładki.

8

W Gremlin (http://gremlin.tinkerpop.com), jest wyrażona jako takie:

setA._().out('x').in('y').retain(setB).back(2) 

Oto, co każdy krok robi:

  1. zaczynają się od Seta (A1, A2, A3 w przykładzie).
  2. Uruchomienie rurociągu Gremlin.
  3. należy przyjmować wychodzące krawędzie oznaczone "x" z tych wierzchołków zestawu A do C1, C2 i C3.
  4. Przyjmij przychodzące krawędzie oznaczone "y" z C1, C2 i C3.
  5. odfiltrować wszystkie kroki, które nie są w zbiorze B (w związku z tym istnieją tylko ścieżki C2 i C3).
  6. wróć do tego, co widziałeś 2 kroki temu - w ten sposób C2 i C3.

Tada!

Powodzenia, Marko.

http://markorodriguez.com

+0

Chcę dostać wierzchołki z obiektu GremlinePipeline, Czy możesz mi powiedzieć, jak to w achive Java API. Poniżej znajduje się kod, którego używam: GremlinPipeline pipeline = new GremlinPipeline (vert) .out ("LIVES_IN_CITY"). In ("LIVES_IN_CITY"). Filter (nowy PipeFunction() {publiczny Boolean compute (Vertex v) {return v. getProperty ("name"). equals (miasto);}}). back (2) .out ("LIVES_IN_CITY"); – RCS