Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Using as() step is slowing down Gremlin Query dramatically

Abierto
#4,803 0 comentarios 0 reacciones 0 asignados Ver en GitHub

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
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java
Área
databases

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

kind/bug/possible

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

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de JanusGraph/janusgraph

Todos los issues de JanusGraph/janusgraph

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.