stringtranslate.com

Gremlin (lenguaje de consulta)

Gremlin es un lenguaje de recorrido de gráficos y una máquina virtual desarrollado por Apache TinkerPop de Apache Software Foundation . Gremlin funciona tanto para bases de datos de gráficos basadas en OLTP como para procesadores de gráficos basados ​​en OLAP . Los autómatas y la base del lenguaje funcional de Gremlin permiten que Gremlin admita de forma natural: consultas imperativas y declarativas ; agnosticismo del idioma anfitrión; lenguajes específicos de dominio definidos por el usuario ; un compilador/optimizador extensible, modelos de ejecución de una o varias máquinas; "Evaluación híbrida de profundidad y amplitud primero con integridad de Turing" . [2]

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

Historia

Integración de proveedores

Gremlin es un lenguaje de recorrido de gráficos con licencia Apache2 que pueden utilizar los proveedores de sistemas de gráficos. Normalmente existen dos tipos de proveedores de sistemas gráficos: bases de datos de gráficos OLTP y procesadores de gráficos OLAP. La siguiente tabla describe los proveedores de gráficos que admiten Gremlin.

Ejemplos transversales

Los siguientes ejemplos de consultas y respuestas de Gremlin en un entorno Gremlin-Groovy son relativos 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 del gráfico MovieLens se detalla a continuación.

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

recorridos simples

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

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

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

duendecillo > gramo . V (). hasLabel ( 'película' ). valores ( 'año' ). mín () ==> 1919 

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

duendecillo > gramo . V (). tiene ( 'película' , 'nombre' , 'Duro de matar' ). inE ( 'calificado' ). valores ( 'estrellas' ). media () ==> 4.121848739495798 

Recorridos de proyección

Para cada categoría, emita un mapa con su nombre y la cantidad de películas que representa.

duendecillo > gramo . V (). hasLabel ( 'categoría' ). como ( 'a' , 'b' ). seleccione ( 'a' , 'b' ). por nombre ' ). por ( inE ( 'categoría' ). 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: Suspense , 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, emita un mapa con su nombre y calificación promedio. Ordene los mapas en orden decreciente según su calificación promedio. Emite los primeros 10 mapas (es decir, los 10 primeros).

duendecillo > gramo . V (). hasLabel ( 'película' ). como ( 'a' , 'b' ). donde ( inE ( 'calificado' ). count (). es ( gt ( 10 ))). seleccione ( 'a' , 'b' ). por nombre ' ). por ( inE ( 'calificado' ). valores ( 'estrellas' ). media ()). orden (). por ( seleccionar ( 'b' ), decr ). límite ( 10 ) ==>[ a: Sanjuro , b: 4.608695652173913 ] ==>[ a: Siete samuráis ( Los siete magníficos ), b: 4.560509554140127 ] ==>[ a: Shawshank Redemption , The , b: 4.554557700942973 ] = =>[ a: Padrino , El , b: 4.524966261808367 ] ==>[ a: Afeitado apurado , A , b: 4.52054794520548 ] ==>[ a: Sospechosos habituales , El , b: 4.517106001121705 ] ==>[ a: Schindler ' s List , b: 4.510416666666667 ] ==>[ a: Pantalones equivocados , The , b: 4.507936507936508 ] ==>[ a: Sunset Blvd . ( también conocido como Sunset Boulevard ), b: 4.491489361702127 ] ==> [ a : En busca del arca perdida , b : 4.47772 ]                                       

Recorridos declarativos de coincidencia de patrones

Gremlin admite la coincidencia de patrones de gráficos declarativos similar a SPARQL . Por ejemplo, la siguiente consulta a continuación utiliza el paso match() de Gremlin .

¿Qué películas de acción de los 80 les gustan a los programadores de 30 y tantos? Cuente en grupo las películas por su nombre y ordene el mapa de conteo de grupos en orden decreciente por valor. Recorte el mapa al top 10 y emita las entradas del mapa.

duendecillo > gramo . V (). match ( __ . as ( 'a' ). hasLabel ( 'película' ), __ . as ( 'a' ). out ( 'categoría' ). has ( 'nombre' , 'Acción' ), __ . as ( ' a ' ) . tiene ( ' año ' , entre ( 1980 , 1990 ) ) , __ como ( ' a ' ) .tiene ( ' estrellas ' , 5 ) , __ como ( ' b ' fueraV ( ) ., ' programador ' ) , __ como ( ' c ' ) .seleccione un ' ). grupoCount (). por nombre ' ). orden ( local ). por ( valorDecr ). límite ( local , 10 ) ==> En busca del arca perdida = 26 == > Star Wars Episodio V - El Imperio Contraataca = 26 == > Terminator ,The = 23 ==> Star Wars Episodio VI - El Retorno del Jedi = 22 ==> Princesa Prometida , The = 19                                    ==> Aliens = 18 ==> Barco , El ( Das Boot ) = 11 ==> Indiana Jones y la Última Cruzada = 11 ==> Star Trek La Ira de Khan = 10 ==> Abismo , El = 9              

recorrido OLAP

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

gremlin > g = gráfica . recorrido ( computadora ( SparkGraphComputer )) ==> graphtraversalsource [ hadoopgraph [ gryoinputformat -> gryooutputformat ], sparkgraphcomputer ] gremlin > g . V (). repetir ( outE ( 'calificado' ). tiene ( 'estrellas' , 5 ). inV (). groupCount ( 'm' ). por ( 'nombre' ). inE ( 'calificado' ). tiene ( 'estrellas' , 5 ) .veces ( 4 ). cap ( 'm' ) ==> Star Wars Episodio IV - Una nueva esperanza 35405394353105332 == > Belleza americana 31943228282020585 == > En busca del arca perdida 31224779793238499 ==> Star Wars Episodio V - El imperio contraataca 30434677119726223 padrino , El 30258518523013057 ==> Shawshank Redemption , El 28297717387901031 ==> La lista de Schindler 27539336654199309 ==> El silencio de los corderos , El 26736276376806173 ==> Fargo 26531050 311325270 ==> Matriz , El 26395118239203191                                            

Máquina transversal de gráficos 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 de Gremlin en el dialecto Gremlin-Java8.

gramo . V (). como un " ). fuera ( "sabe" ). como ( "b" ). seleccione ( "a" , "b" ). por nombre" ) . por edad " )   

El lenguaje Gremlin (es decir, el estilo fluido de expresar un recorrido de gráfico) se puede representar en cualquier lenguaje anfitrión que admita la composición y el anidamiento de funciones . Debido a este simple requisito, existen varios dialectos de Gremlin, incluidos Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure, etc. El recorrido de Gremlin-Java8 anterior se compila en última instancia en una secuencia de pasos llamada recorrido . A continuación se proporciona una representación de cadena del recorrido anterior.

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

Los pasos son las primitivas de la máquina transversal de gráficos Gremlin. Son las instrucciones parametrizadas que finalmente ejecuta la máquina. El conjunto de instrucciones de Gremlin consta de aproximadamente 30 pasos. Estos pasos son suficientes para proporcionar computación de propósito general y lo que normalmente se requiere para expresar los motivos comunes de cualquier consulta de recorrido de gráfico.

Dado que Gremlin es un lenguaje, un conjunto de instrucciones y una máquina virtual, es posible diseñar otro lenguaje transversal que se compile en la máquina transversal Gremlin (análogo a cómo Scala compila en la JVM ). Por ejemplo, el popular lenguaje de coincidencia de patrones gráficos SPARQL se puede compilar para ejecutarlo en la máquina Gremlin. La siguiente consulta SPARQL

SELECCIONE  ?a  ?b  ?c DONDE  {  ?a  a  Persona  .  ?a  ex : sabe  ?b  .  ?a  ex : creado  ?c  .  ?b  ex : creado  ?c  .  ?b  ex : edad  ?  d  .  FILTRO ( ?d  <  30 ) }

compilaría a

[ GraphStep ( [] , vértice ), MatchStep ( AND , [[ MatchStartStep ( a ), LabelStep , IsStep ( eq ( Persona ) ), MatchEndStep ] , [ MatchStartStep ( a ), VertexStep ( OUT , [ sabe ] , vértice ), MatchEndStep ( b ) ] , [ MatchStartStep ( a ), VertexStep ( FUERA , [ creado ] , vértice ), MatchEndStep ( c ) ] , [ MatchStartStep ( b ), VertexStep ( FUERA , [ 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 secuencia de pasos de Gremlin idéntica (es decir, transversal).

gramo . V (). match ( como ( "a" ). etiqueta (). es ( "persona" ), como ( "a" ). fuera ( "sabe" ). como ( "b" ), como ( "a" ). fuera ( " creado" ). como ( "c" ) , como ( " b " ). fuera ( " creado" como ( " c" ), como ( "b " ) . d" ), como ( "d" ). es ( gt ( 30 ))). seleccione ( "a" , "b" , "c" )       

Máquina Gremlin (máquina virtual)

La máquina transversal de gráficos Gremlin se puede ejecutar en una sola máquina o en un clúster informático de varias máquinas. El agnosticismo de ejecución permite que Gremlin se ejecute tanto en bases de datos de gráficos (OLTP) como en procesadores de gráficos (OLAP).

Ver también

Referencias

  1. ^ "Apache TinkerPop - Descargas" . Consultado el 27 de octubre de 2023 .
  2. ^ Rodríguez, Marko A. (2015). "La máquina y el lenguaje de recorrido de gráficos Gremlin (charla invitada)". La máquina y el lenguaje transversal de gráficos Gremlin . págs. 1–10. arXiv : 1508.03843 . doi :10.1145/2815072.2815073. ISBN 9781450339025. S2CID  10533031.
  3. ^ "Los beneficios de la máquina transversal de gráficos Gremlin". 2015-09-14 . Consultado el 17 de septiembre de 2015 .
  4. ^ "El lenguaje transversal de gráficos Gremlin". 2015-08-19 . Consultado el 22 de agosto de 2015 .

enlaces externos

  1. Página de inicio de Apache TinkerPop
  2. sql2gremlin.com (TinkerPop2)
  3. Rodríguez, MA, "The Gremlin Graph Traversal Machine and Language", Actas de la conferencia sobre lenguajes de programación de bases de datos ACM, octubre de 2015.