Articulo de referencia

Gremlin (lenguaje de consulta)

{{cite web|url=https://tinkerpop.apache.org/download.html|title=Apache TinkerPop - Downloads|access-date=12 November 2025}} "},"dialects":{"wt":"Gremlin{{nbh}}Java, Gremlin{{nbh...

Gremlin es un lenguaje de recorrido de grafos y una máquina virtual desarrollados por Apache TinkerPop de la Apache Software Foundation . Gremlin funciona tanto con bases de datos de grafos basadas en OLTP como con procesadores de grafos basados ​​en OLAP . Su base de lenguaje funcional y de autómatas permite que Gremlin admita de forma natural consultas imperativas y declarativas , independencia del lenguaje anfitrión, lenguajes específicos de dominio definidos por el usuario , un compilador/optimizador extensible, modelos de ejecución en una o varias máquinas, y evaluación híbrida en profundidad y amplitud con completitud de Turing . [ 2 ]

Como analogía explicativa, Apache TinkerPop y Gremlin son a las bases de datos de grafos lo que JDBC y SQL son a las bases de datos relacionales . Del mismo modo, la máquina de recorrido Gremlin es a la computación de grafos lo que la máquina virtual de Java es a la computación de propósito general. [ 3 ]

Historia

  • El 30 de octubre de 2009 nació el proyecto, que inmediatamente recibió el nombre de "TinkerPop".
  • 2009-12-25 v0.1 es la primera versión
  • Se lanza la versión 1.0 del 21 de mayo de 2011
  • Se ha lanzado la versión 2.0 (24/05/2012).
  • 16/01/2015 TinkerPop se convierte en un proyecto de la incubadora Apache
  • Se ha lanzado la versión 3.0.0-incubating el 9 de julio de 2015.
  • 23/05/2016 Apache TinkerPop se convierte en un proyecto de primer nivel
  • 2016-07-18 v3.1.3 y v3.2.1 son las primeras versiones lanzadas como Apache TinkerPop.
  • Se ha lanzado la versión 3.3.1 el 17 de diciembre de 2017.
  • Se ha lanzado la versión 3.3.3 del 8 de mayo de 2018.
  • Se ha lanzado la versión 3.4.3 el 5 de agosto de 2019.
  • Se ha lanzado la versión 3.4.6 el 20 de febrero de 2020.
  • Se ha lanzado la versión 3.5.0 el 1 de mayo de 2021.
  • Se ha lanzado la versión 3.6.0 el 4 de abril de 2022.
  • Se ha lanzado la versión 3.7.0 el 31 de julio de 2023.
  • Se ha lanzado la versión 3.8.0 el 12 de noviembre de 2025.

Integración de proveedores

Gremlin es un lenguaje de recorrido de grafos con licencia Apache2 que pueden utilizar los proveedores de sistemas de grafos. Generalmente, existen dos tipos de proveedores de sistemas de grafos: bases de datos de grafos OLTP y procesadores de grafos OLAP. La siguiente tabla muestra los proveedores de grafos que admiten Gremlin.

Ejemplos de recorrido

Los siguientes ejemplos de consultas y respuestas de Gremlin en un entorno Gremlin-Groovy se refieren a una representación gráfica del conjunto de datos MovieLens . [ 4 ] El conjunto de datos incluye usuarios que califican películas. Cada usuario tiene una ocupación y cada película tiene una o más categorías asociadas. El esquema gráfico de MovieLens se detalla a continuación.

usuario -- calificado [ estrellas : 0 - 5 ]--> película usuario -- ocupación --> ocupación película -- categoría --> categoría

Recorridos simples

Para cada vértice del grafo, emita su etiqueta, luego agrupe y cuente cada etiqueta distinta.

gremlin > g . V (). label (). groupCount () ==>[ ocupación: 21 , película: 3883 , categoría: 18 , usuario: 6040 ]

¿En qué año se realizó la película más antigua?

gremlin > g . V (). hasLabel ( 'movie' ). values ​​( 'year' ). min () ==> 1919

¿Cuál es la calificación promedio de Duro de Matar?

gremlin > g . V (). has ( 'movie' , 'name' , 'Die Hard' ). inE ( 'rated' ). values ​​( 'stars' ). mean () ==> 4.121848739495798

Recorridos de proyección

Para cada categoría, se generará un mapa con su nombre y el número de películas que representa.

gremlin > g . V (). hasLabel ( 'category' ). as ( 'a' , 'b' ). select ( 'a' , 'b' ). by ( 'name' ). por ( inE ( 'category' ). count ()) ==>[ a: Animación , b: 105 ] ==>[ a: Infantil , b : 251 ] ==>[ a: Comedia , b: 1200 ] ==>[ a: Aventura , b: 283 ] ==>[ a: Fantasía , b: 68 ] ==>[ a : Romance , b: 471 ] ==>[ a: Drama , b: 1603 ] ==>[ a: Acción , b: 503 ] ==>[ a: Crimen , b: 211 ] ==>[ a: Suspenso , b: 492 ] ==>[ a: Terror , b: 343 ] ==>[ a : Ciencia ficción , b: 276 ] ==>[ a: Documental , b: 127 ] ==>[ a: Guerra , b: 143 ] ==>[ a: Musical , b: 114 ] ==>[ a: Misterio , b: 106 ] ==>[ a: Cine negro , b: 44 ] ==>[ a: Western , b : 68 ]

Para cada película con al menos 11 calificaciones, genera un mapa con su nombre y calificación promedio. Ordena los mapas en orden descendente según su calificación promedio. Genera los primeros 10 mapas (es decir, los 10 mejores).

gremlin > g . V (). hasLabel ( 'movie' ). as ( 'a' , 'b' ). where ( inE ( 'rated' ). count (). is ( gt ( 10 ))). select ( 'a' , 'b' ). by ( 'name' ). by ( inE ( 'rated' ). values ​​( 'stars' ). mean ()). order (). by ( select ( 'b' ), decr ). límite ( 10 ) ==>[ a: Sanjuro , b: 4.608695652173913 ] ==>[ a: Los siete samuráis ( Los siete magníficos ) , b: 4.560509554140127 ] ==>[ a: Cadena perpetua , The , b: 4.554557700942973 ] ==>[ a: El padrino , The , b: 4.524966261808367 ] ==>[ a: Afeitado apurado , A , b : 4.52054794520548 ] ==>[ a: Sospechosos habituales , The , b: 4.517106001121705 ] ==>[ a: La lista de Schindler , b: 4.510416666666667 ] ==>[ a: Wrong Trousers , The , b: 4.507936507936508 ] ==>[ a: Sunset Blvd . ( a . k . a . Sunset Boulevard ), b: 4.491489361702127 ] ==>[ a: Raiders of the Lost Ark , b: 4.47772 ]

Recorridos de coincidencia de patrones declarativos

Gremlin admite la coincidencia de patrones de grafos declarativos de forma similar a SPARQL . Por ejemplo, la siguiente consulta utiliza el paso match() de Gremlin .

¿Qué películas de acción de los 80 les gustan a los programadores de treinta y tantos? Agrupa las películas por su nombre y ordena el mapa de recuento de grupos en orden descendente según su valor. Recorta el mapa a los 10 primeros y muestra las entradas.

gremlin > g . V (). match ( __ . as ( 'a' ). hasLabel ( 'movie' ), __ . as ( 'a' ). out ( 'category' ). has ( 'name' , 'Action' ), __ . as ( 'a' ). has ( 'year' , between ( 1980 , 1990 )), __ . as ( 'a' ). inE ( 'rated' ). as ( 'b' ), __ . as ( 'b' ). has ( 'stars' , 5 ), __ . as ( 'b' ). outV (). as ( 'c' ), __ . as ( 'c' ). out ( 'occupation' ). has ( 'name' , 'programmer' ), __ . as ( 'c' ). has ( 'age' , between ( 30 , 40 ))). select ( 'a' ). groupCount (). by ( 'name' ). order ( local ). by ( valueDecr ). limit ( local , 10 ) ==> Raiders of the Lost Ark = 26 ==> Star Wars Episode V - The Empire Strikes Back = 26 ==> Terminator ,La = 23 ==> Star Wars Episodio VI - El retorno del Jedi = 22 ==> La princesa prometida , La = 19==> Aliens = 18 ==> El barco ( Das Boot ) = 11 == > Indiana Jones y la última cruzada = 11 ==> Star Trek: La ira de Khan = 10 == > El abismo = 9

Recorrido OLAP

¿Qué películas son las más importantes en el gráfico implícito de 5 estrellas?

gremlin > g = graph . traversal ( computer ( SparkGraphComputer )) ==> graphtraversalsource [ hadoopgraph [ gryoinputformat -> gryooutputformat ], sparkgraphcomputer ] gremlin > g . V (). repeat ( outE ( 'rated' ). has ( 'stars' , 5 ). inV (). groupCount ( 'm' ). by ( 'name' ). inE ( 'rated' ). has ( 'stars' , 5 ). outV ()). times ( 4 ). cap ( ' m ' ) ==> Star Wars Episodio IV - Una Nueva Esperanza 35405394353105332 ==> American Beauty 31943228282020585 ==> En busca del arca perdida 31224779793238499 ==> Star Wars Episodio V - El Imperio Contraataca 30434677119726223 ==> El Padrino 30258518523013057 == > Cadena perpetua 28297717387901031 == > La lista de Schindler 27539336654199309 == > El silencio de los corderos 26736276376806173 == > Fargo 26531050311325270 ==> Matriz , El 26395118239203191

Máquina de recorrido de grafos Gremlin

Gremlin es una máquina virtual compuesta por un conjunto de instrucciones y un motor de ejecución. Se establece una analogía entre Gremlin y Java .

Pasos de Gremlin (conjunto de instrucciones)

El siguiente recorrido es un recorrido Gremlin en el dialecto Gremlin-Java8.

g . V (). como ( "a" ). fuera ( "sabe" ). como ( "b" ). seleccionar ( "a" , "b" ). por ( "nombre" ). por ( "edad" )

El lenguaje Gremlin (es decir, la forma fluida de expresar un recorrido de grafos) puede representarse en cualquier lenguaje anfitrión que admita la composición y el anidamiento de funciones . Debido a este sencillo requisito, existen varios dialectos de Gremlin, como Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure, etc. El recorrido Gremlin-Java8 descrito anteriormente se compila finalmente en una secuencia de pasos denominada recorrido . A continuación se proporciona una representación en cadena de caracteres del recorrido anterior.

[ GraphStep ( [] , vértice ) @ [ a ] ​​, VertexStep ( SALIDA , [ sabe ] , vértice ) @ [ b ] , SelectStep ( [ a , b ] , [ valor ( nombre ), valor ( edad ) ] ) ]

Los pasos son los elementos básicos de la máquina de recorrido de grafos Gremlin. Son las instrucciones parametrizadas que la máquina ejecuta. El conjunto de instrucciones de Gremlin consta de aproximadamente 30 pasos. Estos pasos son suficientes para realizar cálculos de propósito general y para expresar los motivos comunes de cualquier consulta de recorrido de grafos.

Dado que Gremlin es un lenguaje, un conjunto de instrucciones y una máquina virtual, es posible diseñar otro lenguaje de recorrido que se compile para la máquina de recorrido Gremlin (de forma análoga a como Scala se compila para la JVM ). Por ejemplo, el popular lenguaje de coincidencia de patrones de grafos SPARQL se puede compilar para ejecutarse en la máquina Gremlin. La siguiente consulta SPARQL

SELECCIONAR ?a ?b ?c DONDE { ?a a Persona . ?a ej . : conoce ?b . ?a ej . : creó ?c . ?b ej . : creó ?c . ?b ej . : edad ? d . FILTRAR ( ?d < 30 ) }

se compilaría en

[ GraphStep ( [] , vértice ), MatchStep ( AND , [[ MatchStartStep ( a ), LabelStep , IsStep ( eq ( Persona )), MatchEndStep ] , [ MatchStartStep ( a ), VertexStep ( SALIDA , [ sabe ] , vértice ), MatchEndStep ( b ) ] , [ MatchStartStep ( a ), VertexStep ( SALIDA , [ creado ] , vértice ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), VertexStep ( SALIDA , [ creado ] , vértice ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), PropertiesStep ( [ edad ] , valor ), MatchEndStep ( d ) ] , [ MatchStartStep ( d ), IsStep ( gt ( 30 )), MatchEndStep ]] ), SelectStep ( [ a , b , c ] ) ] .

En Gremlin-Java8, la consulta SPARQL anterior se representaría como se muestra a continuación y se compilaría en la misma secuencia de pasos de Gremlin (es decir, recorrido).

g . V (). match ( as ( "a" ). label (). is ( "person" ), as ( "a" ). out ( "knows" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), as ( "b" ). values ​​( "age" ). as ( "d" ), as ( "d" ). is ( gt ( 30 ))). select ( "a" , "b" , "c" )

Máquina Gremlin (máquina virtual)

La máquina de recorrido de grafos Gremlin puede ejecutarse en una sola máquina o en un clúster de computación de varias máquinas. Su independencia de la plataforma de ejecución permite que Gremlin funcione tanto en bases de datos de grafos (OLTP) como en procesadores de grafos (OLAP).

Véase también

Referencias

  1. "Apache TinkerPop - Descargas" . Consultado el 12 de noviembre de 2025 .
  2. Rodríguez, Marko A. (2015). «La máquina y el lenguaje de recorrido de grafos Gremlin (charla invitada)». La máquina y el lenguaje de recorrido de grafos Gremlin . págs. 1–10 . arXiv : 1508.03843 . doi : 10.1145/2815072.2815073 . ISBN  9781450339025. S2CID 10533031 . 
  3. "Los beneficios de la máquina de recorrido de grafos Gremlin" . 14 de septiembre de 2015. Consultado el 17 de septiembre de 2015 .
  4. "El lenguaje de recorrido de grafos Gremlin" . 19 de agosto de 2015. Consultado el 22 de agosto de 2015 .
  1. Página principal de Apache TinkerPop
  2. sql2gremlin.com (TinkerPop2)
  3. Rodríguez, MA, " La máquina y el lenguaje de recorrido de grafos Gremlin ", Actas de la Conferencia de Lenguajes de Programación de Bases de Datos de la ACM, octubre de 2015.