2010-06-02 11 views

Respuesta

4

En muchos casos, la estructura del dominio se puede aprovechar para mejorar el rendimiento. Digamos que usted sabe que, en general, sus entidades A tienen menos relaciones x en comparación con el número de relaciones y en las entidades B. Luego, puede atravesar dos pasos desde el nodo A y ver dónde se muestra el nodo B, y filtrar los nodos C de esta manera. Aquí hay un código para este enfoque:

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; 
     } 
    } 
} 

Otra forma sería comenzar dos hilos que exploran las relaciones de ambos lados.

Un tercer enfoque sería crear un índice especializado que ayudaría a responder este tipo de consultas, lo que obviamente dañaría el rendimiento de las inserciones.

8

En Gremlin (http://gremlin.tinkerpop.com), esto se expresa como tal:

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

Esto es lo que cada paso hace:

  1. inicio en la cerda (A1, A2, A3 en el ejemplo).
  2. inicia una tubería Gremlin.
  3. toma los bordes etiquetados "x" salientes de esos vértices setA a C1, C2 y C3.
  4. tome los bordes etiquetados "y" entrantes de C1, C2 y C3.
  5. filtra todos los pasos que no están en setB (por lo tanto, solo existen rutas C2 y C3).
  6. regrese a lo que vio hace 2 pasos - por lo tanto, C2 y C3.

Tada!

Buena suerte, Marko.

http://markorodriguez.com

+0

quiero conseguir los vértices del objeto GremlinePipeline, ¿Me podría decir cómo achive esto en Java Api. A continuación está el código que estoy usando: GremlinPipeline pipeline = new GremlinPipeline (vert) .out ("LIVES_IN_CITY"). In ("LIVES_IN_CITY"). Filter (nueva PipeFunction() {cálculo booleano público (Vertex v) {return v. getProperty ("nombre"). equals (city);}}). back (2) .out ("LIVES_IN_CITY"); – RCS

Cuestiones relacionadas