Using as() step is slowing down Gremlin Query dramatically
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza reproduciendo los recorridos de Gremlin reportados en la configuración de JanusGraph en memoria, comparando los resultados de profile() con y sin as("MARKER") y barrier(2500). Traza el procesamiento del recorrido y de los segmentos de filtros implicado en estos puntos de entrada. Se considera terminado cuando se haya identificado y corregido la regresión de rendimiento, y los resultados de profile() muestren que las consultas afectadas ya no presentan la ralentización reportada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Using as() step is slowing down performance of the Gremlin Query with some combinations
specifically when Filter Segment is used, for example:
- around 500 milliseconds:
g.V().and( __.properties("amount")) - around 2 seconds:
g.V().as("MARKER").and( __.properties("amount"))
Timing was measured by dedicated procedure, and is similar to the one reported by profile() step as samples below.
We have the same experience on our commercial JanusGraph system with big data, where performance of some similar queries with the Reference Markers are 5 x times slower than without it.
Interestingly, adding barrier(2500) step is able to improve performance, e.g.
- around 500ms:
g.V().as("MARKER").barrier(2500).and( __.properties("amount"))
Steps to reproduce using popular samples from JanusGraph documentation
graph = JanusGraphFactory.open("inmemory")
mgmt = graph.openManagement()
timestamp = mgmt.makePropertyKey("timestamp").dataType(Integer.class).make()
amount = mgmt.makePropertyKey("amount").dataType(Integer.class).cardinality(Cardinality.LIST).make()
mgmt.buildPropertyIndex(amount, 'amountByTime', Order.desc, timestamp)
mgmt.commit()
for (int ii=0; ii < 100000; ii++) { bob = graph.addVertex(); bob.property("amount", 100, "timestamp", 1600000000); bob.property("amount", 200, "timestamp", 1500000000); bob.property("amount", -150, "timestamp", 1550000000); }
g = graph.traversal()
- around 500 milliseconds:
g.V().and( __.properties("amount").has("timestamp",P.eq(1600000000))).count().profile() - around 2 seconds:
g.V().as("MARKER").and( __.properties("amount").has("timestamp",P.eq(1600000000))).count().profile()
Similar results are also for just simplified queries, however the difference is not that drastic in memory DB, however bigger in reality
- around 80ms:
g.V().count().profile() - around 90ms:
g.V().as("MARKER").count().profile()
- Lenguaje dominante
- Java
- Estrellas
- 5.8k
- Forks
- 1.2k
- Merge medio
- 22 h 17 min
- PR fusionados (30 d)
- 28
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de JanusGraph/janusgraph
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
JanusGraph/janusgraph#4943 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 62/100
JanusGraph/janusgraph#1578 ·
Los mantenedores suelen responder en 1 día
-
Native bitemporal supportAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JanusGraph/janusgraph#4954 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
JanusGraph/janusgraph#4934 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
JanusGraph/janusgraph#4923 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de JanusGraph/janusgraph
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
beehive-lab/TornadoVM#1151 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
Los mantenedores suelen responder en 1 día
-
(cbor) `maxStringLength` not consistently checked for chunked (indefinite-length) text valuesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
FasterXML/jackson-dataformats-binary#823 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día