[ 
https://issues.apache.org/jira/browse/TINKERPOP-3009?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17781895#comment-17781895
 ] 

ASF GitHub Bot commented on TINKERPOP-3009:
-------------------------------------------

spmallette opened a new pull request, #2322:
URL: https://github.com/apache/tinkerpop/pull/2322

   https://issues.apache.org/jira/browse/TINKERPOP-3009
   
   Note that TraverserGenerators changed a bit because of the filter patterns 
that were added, thus the assertion adjustments. Basically, rather than adding 
and(inV()..., outV()...) for every single edge step it's done more 
strategically such that only the direction not already traversed gets filtered. 
Also avoids some retesting of vertices if they were already handled.
   
   Before:
   
   {code}
   gremlin> g.withStrategies(SubgraphStrategy.build().
   ......1>            vertices(hasLabel('x','y','z')).create()).
   ......2>   V().out().profile()
   ==>Traversal Metrics
   Step                                                               Count  
Traversers       Time (ms)    % Dur
   
=============================================================================================================
   TinkerGraphStep(vertex,[~label.within([x, y, z])])                           
                  0.160    58.50
   VertexStep(OUT,edge)                                                         
                  0.017     6.53
   AndStep([[EdgeVertexStep(IN), HasStep([~label.w...                           
                  0.017     6.19
     EdgeVertexStep(IN)                                                         
                  0.000
     HasStep([~label.within([x, y, z])])                                        
                  0.000
     EdgeVertexStep(OUT)                                                        
                  0.000
     HasStep([~label.within([x, y, z])])                                        
                  0.000
   EdgeVertexStep(IN)                                                           
                  0.064    23.59
   HasStep([~label.within([x, y, z])]) 
   {code}
   
   and after:
   
   {code}
   gremlin> g.withStrategies(new SubgraphStrategy(vertices: __.has("name", 
P.within("josh", "lop", "ripple")))).V().out().profile()
   
   ==>Traversal Metrics
   
   Step                                                               Count  
Traversers       Time (ms)    % Dur
   
   
=============================================================================================================
   
   TinkerGraphStep(vertex,[name.within([josh, lop,...                     3     
      3           8.231    95.09
   
   VertexStep(OUT,vertex)                                                 2     
      2           0.337     3.90
   
   HasStep([name.within([josh, lop, ripple])])                            2     
      2           0.087     1.01
   
                                               >TOTAL                     -     
      -           8.656        -
   
   {code}




> SubgraphStrategy produces excessive filtering when multiple labels are 
> filtered upon
> ------------------------------------------------------------------------------------
>
>                 Key: TINKERPOP-3009
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-3009
>             Project: TinkerPop
>          Issue Type: Bug
>          Components: process
>    Affects Versions: 3.6.2
>            Reporter: Brian O'Keefe
>            Priority: Critical
>
> See the example profile below.  Notice the traversal includes _has _filters 
> everywhere repeatedly applied for vertices which are already filtered before 
> too.
> {noformat}
> gremlin> g.withStrategies(SubgraphStrategy.build().
> ......1>            vertices(hasLabel('x','y','z')).create()).
> ......2>   V().out().profile()
> ==>Traversal Metrics
> Step                                                               Count  
> Traversers       Time (ms)    % Dur
> =============================================================================================================
> TinkerGraphStep(vertex,[~label.within([x, y, z])])                            
>                  0.160    58.50
> VertexStep(OUT,edge)                                                          
>                  0.017     6.53
> AndStep([[EdgeVertexStep(IN), HasStep([~label.w...                            
>                  0.017     6.19
>   EdgeVertexStep(IN)                                                          
>                  0.000
>   HasStep([~label.within([x, y, z])])                                         
>                  0.000
>   EdgeVertexStep(OUT)                                                         
>                  0.000
>   HasStep([~label.within([x, y, z])])                                         
>                  0.000
> EdgeVertexStep(IN)                                                            
>                  0.064    23.59
> HasStep([~label.within([x, y, z])])                                           
>                  0.014     5.18
>                                             >TOTAL                     -      
>      -           0.274        -
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to