JanusGraph / JanusGraph/janusgraph

Inconsistent performance

Open
#3,542 0 comments 0 reactions 0 assignees View on GitHub
kind/bug/possible
Dominant language
Java
Stars
5.8k
Forks
1.2k
Avg merge
13h 53m
Merged PRs (30d)
6

Description

Version: 0.6.2

Query 1: *g.V().bothE().otherV().bothE().otherV().outE().otherV().inE().otherV().inE().otherV().inE().as('x').otherV().select('x').count()*
Result: *752670*
Time: *954.12ms*

Query 2:
*g.V().bothE().otherV().bothE().otherV().outE().otherV().inE().otherV().inE().otherV().inE().otherV().as('x').select('x').count()*
Result: *752670*
Time: *34.94ms*

To reproduce:
```
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
from gremlin_python.process.traversal import T
from gremlin_python.process.traversal import Cardinality

class GremlinSchemaInit:
id = T.id
single = Cardinality.single
graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))

def init_dataset(self):
self.g.V().drop().iterate()
n1 = self.g.addV('A').property('id', '1').property('p', "node01").next()
n2 = self.g.addV('A').property('id', '2').property('p', 'node02').next()
n3 = self.g.addV('A').property('id', '3').property('p', 'node03').next()
n4 = self.g.addV('A').property('id', '4').property('p', 'node04').next()
n5 = self.g.addV('A').property('id', '5').property('p', 'node05').next()
n6 = self.g.addV('B').property('id', '6').property('p', 'node06').next()
n7 = self.g.addV('B').property('id', '7').property('p', 'node07').next()
n8 = self.g.addV('B').property('id', '8').property('p', 'node08').next()
n9 = self.g.addV('B').property('id', '9').property('p', 'node09').next()
n10 = self.g.addV('B').property('id', '10').property('p', 'node10').next()
self.g.addE('X').property('p', 'edge01').from_(n1).to(n2).iterate()
self.g.addE('X').property('p', 'edge02').from_(n2).to(n3).iterate()
self.g.addE('X').property('p', 'edge03').from_(n3).to(n4).iterate()
self.g.addE('X').property('p', 'edge04').from_(n4).to(n5).iterate()
self.g.addE('X').property('p', 'edge05').from_(n5).to(n6).iterate()
self.g.addE('X').property('p', 'edge06').from_(n6).to(n7).iterate()
self.g.addE('X').property('p', 'edge07').from_(n7).to(n8).iterate()
self.g.addE('X').property('p', 'edge08').from_(n8).to(n9).iterate()
self.g.addE('X').property('p', 'edge09').from_(n9).to(n10).iterate()
self.g.addE('X').property('p', 'edge10').from_(n10).to(n1).iterate()
self.g.addE('Y').property('p', 'edge11').from_(n2).to(n1).iterate()
self.g.addE('Y').property('p', 'edge12').from_(n3).to(n2).iterate()
self.g.addE('Y').property('p', 'edge13').from_(n4).to(n3).iterate()
self.g.addE('Y').property('p', 'edge14').from_(n5).to(n4).iterate()
self.g.addE('Y').property('p', 'edge15').from_(n6).to(n5).iterate()
self.g.addE('Y').property('p', 'edge16').from_(n7).to(n6).iterate()
self.g.addE('Y').property('p', 'edge17').from_(n8).to(n7).iterate()
self.g.addE('Y').property('p', 'edge18').from_(n9).to(n8).iterate()
self.g.addE('Y').property('p', 'edge19').from_(n10).to(n9).iterate()
self.g.addE('Y').property('p', 'edge20').from_(n1).to(n10).iterate()
self.g.addE('X').property('p', 'edge21').from_(n3).to(n9).iterate()
self.g.addE('Y').property('p', 'edge22').from_(n6).to(n3).iterate()
self.g.addE('Y').property('p', 'edge23').from_(n1).to(n8).iterate()
self.g.addE('X').property('p', 'edge24').from_(n2).to(n8).iterate()
self.g.addE('Y').property('p', 'edge25').from_(n5).to(n8).iterate()
self.g.addE('X').property('p', 'edge26').from_(n7).to(n3).iterate()
self.g.addE('Y').property('p', 'edge27').from_(n9).to(n2).iterate()
self.g.addE('Y').property('p', 'edge28').from_(n9).to(n6).iterate()
self.g.addE('X').property('p', 'edge29').from_(n1).to(n6).iterate()
self.g.addE('Y').property('p', 'edge30').from_(n2).to(n1).iterate()
self.g.addE('X').property('p', 'edge31').from_(n1).to(n5).iterate()
self.g.addE('X').property('p', 'edge32').from_(n2).to(n1).iterate()
self.g.addE('X').property('p', 'edge33').from_(n3).to(n5).iterate()
self.g.addE('X').property('p', 'edge34').from_(n4).to(n7).iterate()
self.g.addE('X').property('p', 'edge35').from_(n5).to(n6).iterate()
self.g.addE('X').property('p', 'edge36').from_(n6).to(n5).iterate()
self.g.addE('X').property('p', 'edge37').from_(n7).to(n6).iterate()
self.g.addE('X').property('p', 'edge38').from_(n8).to(n2).iterate()
self.g.addE('X').property('p', 'edge39').from_(n9).to(n7).iterate()
self.g.addE('X').property('p', 'edge40').from_(n10).to(n3).iterate()
self.g.addE('Y').property('p', 'edge41').from_(n2).to(n1).iterate()
self.g.addE('Y').property('p', 'edge42').from_(n8).to(n2).iterate()
self.g.addE('Y').property('p', 'edge43').from_(n9).to(n3).iterate()
self.g.addE('Y').property('p', 'edge44').from_(n9).to(n4).iterate()
self.g.addE('Y').property('p', 'edge45').from_(n2).to(n5).iterate()
self.g.addE('Y').property('p', 'edge46').from_(n7).to(n6).iterate()
self.g.addE('Y').property('p', 'edge47').from_(n6).to(n7).iterate()
self.g.addE('Y').property('p', 'edge48').from_(n3).to(n8).iterate()
self.g.addE('Y').property('p', 'edge49').from_(n1).to(n9).iterate()
self.g.addE('Y').property('p', 'edge50').from_(n7).to(n10).iterate()

test = GremlinSchemaInit()
test.init_dataset()
```

Q1 Explain:
```

gremlin> g.V().bothE().otherV().bothE().otherV().outE().otherV().inE().otherV().inE().otherV().inE().as('x').otherV().select('x').count().explain()
==>Traversal Explanation
===============================================================================================================================================================================================================================================================================================================================================================================================
Original Traversal [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]

ConnectiveStrategy [D] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
IdentityRemovalStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
ByModulatorOptimizationStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
ProductiveByStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
EarlyLimitStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
MatchPredicateStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
FilterRankingStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
InlineFilterStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
CountStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
PathRetractionStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
LazyBarrierStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexHasUniquePropertyOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexFilterOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexHasIdOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexIsOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphLocalQueryOptimizerStrategy [P] [GraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphStepStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphMultiQueryStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphMixedIndexCountStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphIoRegistrationStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
ProfileStrategy [F] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
StandardVerificationStrategy [V] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]

Final Traversal [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(BOTH,vertex), JanusGraphVertexStep(OUT,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,vertex), JanusGraphVertexStep(IN,edge)@[x], EdgeOtherVertexStep, SelectOneStep(last,x,null), CountGlobalStep]
```
Q2 Explain:
```
gremlin> g.V().bothE().otherV().bothE().otherV().outE().otherV().inE().otherV().inE().otherV().inE().otherV().as('x').select('x').count().explain()
==>Traversal Explanation
========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
Original Traversal [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep@[x], SelectOneStep(last,x,null), CountGlobalStep]

ConnectiveStrategy [D] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep@[x], SelectOneStep(last,x,null), CountGlobalStep]
IdentityRemovalStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep@[x], SelectOneStep(last,x,null), CountGlobalStep]
ByModulatorOptimizationStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep@[x], SelectOneStep(last,x,null), CountGlobalStep]
ProductiveByStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(BOTH,edge), EdgeOtherVertexStep, VertexStep(OUT,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep, VertexStep(IN,edge), EdgeOtherVertexStep@[x], SelectOneStep(last,x,null), CountGlobalStep]
IncidentToAdjacentStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
EarlyLimitStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
MatchPredicateStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
FilterRankingStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
InlineFilterStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
AdjacentToIncidentStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
RepeatUnrollStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
CountStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
PathRetractionStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), VertexStep(BOTH,vertex), VertexStep(OUT,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex), VertexStep(IN,vertex)@[x], SelectOneStep(last,x,null), CountGlobalStep]
LazyBarrierStrategy [O] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexHasUniquePropertyOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexFilterOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexHasIdOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
AdjacentVertexIsOptimizerStrategy [P] [GraphStep(vertex,[]), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(BOTH,vertex), NoOpBarrierStep(2500), VertexStep(OUT,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500), VertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphLocalQueryOptimizerStrategy [P] [GraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphStepStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphMultiQueryStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphMixedIndexCountStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
JanusGraphIoRegistrationStrategy [P] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
ProfileStrategy [F] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
StandardVerificationStrategy [V] [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]

Final Traversal [JanusGraphStep(vertex,[]), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(BOTH,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(OUT,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500), JanusGraphVertexStep(IN,vertex), NoOpBarrierStep(2500)@[x], SelectOneStep(last,x,null), CountGlobalStep]
```

Contributor guide

Open the contributing guide

Research direction

No repository file or test is named. Start by running the provided Gremlin-Python dataset and the two traversals against JanusGraph 0.6.2, then compare their timings and explain() output. Done should include a reproducible explanation of the performance difference and a verified resolution or regression test.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
databases, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.