Neo4j-Lenguaje de consulta Cypher vs Gremlin
graph-databases (6)
Estoy comenzando a desarrollar con Neo4j usando la API REST. Vi que hay dos opciones para realizar consultas complejas: Cypher (lenguaje de consulta de Neo4j) y Gremlin (el lenguaje de consulta / cruce de propósito general).
Esto es lo que quiero saber: ¿hay alguna consulta u operación que se pueda hacer usando Gremlin y no se puede hacer con Cypher? ¿o viceversa?
Cypher me parece mucho más claro que Gremlin, y en general parece que los chicos de Neo4j van con Cypher. Pero, si Cypher es limitado en comparación con GREMLIN, me gustaría saberlo con anticipación.
Inicialmente comencé a usar Gremlin. Sin embargo, en ese momento, la interfaz REST era un poco inestable, así que cambié a Cypher. Tiene mucho mejor soporte para Neo4j. Sin embargo, hay algunos tipos de consultas que simplemente no son posibles con Cypher, o donde Cypher no puede optimizar del modo que puede con Gremlin.
Gremlin está construido sobre Groovy, por lo que puede usarlo como una forma genérica para que Neo4j ejecute el código ''Java'' y realice varias tareas desde el servidor, sin tener que tomar el hit HTTP de la interfaz REST. Entre otros, Gremlin te permitirá modificar los datos.
Sin embargo, cuando todo lo que quiero es consultar datos, voy con Cypher ya que es más fácil de leer y de mantener. Gremlin es la reserva cuando se alcanza una limitación.
Las consultas de Gremlin pueden generarse mediante programación. (Consulte http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#intro-to-generative-selects para saber a qué me refiero). Esto parece ser un poco más complicado con Cypher.
Los esfuerzos del equipo Neo4j en Cypher han sido realmente impresionantes, y han recorrido un largo camino. El equipo de Neo normalmente empuja a las personas hacia él, y a medida que Cypher madure, Gremlin probablemente reciba menos atención. Cypher es una buena opción a largo plazo.
Dicho eso, Gremlin es un Groovy DSL. Su uso a través de su punto final REST Neo4j permite un acceso completo y sin restricciones a la API subyacente Java de Neo4j. No se puede hacer coincidir el mismo (y otros complementos de scripts en la misma categoría) en términos de potencia de bajo nivel. Además, puedes ejecutar Cypher desde el plugin de Gremlin .
De cualquier manera, hay una ruta de actualización sensata donde aprendes ambas cosas. Yo iría con el que te ayuda a correr más rápido. En my projects , suelo usar Gremlin y luego llamar a Cypher (desde Gremlin o no) cuando necesito resultados tabulares o coincidencia de patrones expresivos; ambos son un problema en la DSL de Gremlin.
Para consultas generales, Cypher es suficiente y probablemente sea más rápido. La ventaja de Gremlin sobre Cypher es cuando ingresas en un recorrido de alto nivel: en Gremlin, puedes definir mejor el patrón de recorrido exacto (o tus propios algoritmos), mientras que en Cypher el motor intenta encontrar la mejor solución de desplazamiento.
Personalmente uso Cypher por su simplicidad y, hasta la fecha, no he tenido situaciones en las que haya tenido que usar Gremlin (salvo que trabaje con las funciones de importación / exportación de graphML de Gremlin). Sin embargo, espero que, incluso si tuviera que usar Gremlin, lo haría para una consulta específica que encontraría en la red y nunca más volvería.
Siempre puedes aprender Cypher realmente rápido (en días) y luego continuar con el Gremlin general (de más larga duración).
Respuesta larga corta: use cypher para consulta y gremlin para cruce. Verá el tiempo de respuesta usted mismo.
Tenemos que atravesar miles de nodos en nuestras consultas. Cypher fue lento. El equipo de Neo4j nos dijo que implementar nuestro algoritmo directamente contra la API de Java sería 100-200 veces más rápido. Lo hicimos y obtuvimos fácilmente el factor 60. A partir de ahora no tenemos una sola consulta Cypher en nuestro sistema debido a la falta de confianza. Las consultas de Easy Cypher son fáciles de escribir en Java, las consultas complejas no funcionarán. El problema es que cuando tienes múltiples condiciones en tu consulta, no hay forma de que Cypher diga en qué orden realizar los recorridos. Por lo tanto, su consulta de cifrado puede enloquecer primero en el gráfico en una dirección incorrecta. No he hecho mucho con Gremlin, pero me imagino que obtendrás mucho más control de ejecución con Gremlin.