Estoy empezando 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 / transversal de gráfico de propósito general).
Esto es lo que quiero saber: ¿hay alguna consulta u operación que se pueda realizar con Gremlin y que no se pueda realizar 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, realmente me gustaría saberlo de antemano.
neo4j
graph-databases
cypher
gremlin
Rubinsh
fuente
fuente
Respuestas:
Para consultas generales, Cypher es suficiente y probablemente más rápido. La ventaja de Gremlin sobre Cypher es cuando te adentras en travesías de alto nivel. En Gremlin, puede definir mejor el patrón de recorrido exacto (o sus propios algoritmos) mientras que en Cypher el motor intenta encontrar la mejor solución de recorrido por sí mismo.
Yo personalmente uso Cypher debido a su simplicidad y, hasta la fecha, no he tenido situaciones en las que tuviera que usar Gremlin (excepto trabajando 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 no volvería nunca más.
Siempre puedes aprender Cypher muy rápido (en días) y luego continuar con el Gremlin general (a más largo plazo).
fuente
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 Easy Cypher son fáciles de escribir en Java, las consultas complejas no funcionan. El problema es que cuando tiene varias condiciones en su consulta, no hay forma en Cypher de decir en qué orden realizar los recorridos. Por lo tanto, es posible que su consulta cifrada se vuelva loca en el gráfico en una dirección incorrecta primero. No he hecho mucho con Gremlin, pero me imagino que obtendrás mucho más control de ejecución con Gremlin.
fuente
Los esfuerzos del equipo de Neo4j en Cypher han sido realmente impresionantes y han recorrido un largo camino. El equipo de Neo generalmente empuja a la gente hacia eso, y a medida que Cypher madura, Gremlin probablemente recibirá menos atención. Cypher es una buena opción a largo plazo.
Dicho esto, Gremlin es un DSL maravilloso. Usarlo a través de su punto final REST de Neo4j permite un acceso completo y sin restricciones a la API Java de Neo4j subyacente. Este (y otros complementos de script en la misma categoría) no se pueden igualar en términos de potencia de bajo nivel. Además, puede ejecutar Cypher desde el complemento Gremlin .
De cualquier manera, hay una ruta de actualización sensata en la que aprende ambos. Yo elegiría el que te ayude a ponerte en marcha más rápido. En mi proyectos , normalmente uso Gremlin y luego llamo a Cypher (desde dentro de Gremlin o no) cuando necesito resultados tabulares o coincidencia de patrones expresivos; ambos son un dolor en el DSL de Gremlin.
fuente
Inicialmente comencé a usar Gremlin. Sin embargo, en ese momento, la interfaz REST era un poco inestable, así que cambié a Cypher. Tiene un soporte mucho mejor para Neo4j. Sin embargo, hay algunos tipos de consultas que simplemente no son posibles con Cypher, o en las que Cypher no puede optimizar del todo la forma en que puede hacerlo con Gremlin.
Gremlin está construido sobre Groovy, por lo que puede usarlo como una forma genérica de hacer que Neo4j ejecute código 'Java' y realice varias tareas desde el servidor, sin tener que recibir el acceso HTTP desde la interfaz REST. Entre otros, Gremlin te permitirá modificar datos.
Sin embargo, cuando todo lo que quiero es consultar datos, elijo Cypher, ya que es más legible y más fácil de mantener. Gremlin es la alternativa cuando se alcanza una limitación.
fuente
Las consultas de Gremlin se pueden generar 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.
fuente
Cypher solo funciona para consultas simples. Cuando comienza a incorporar lógica de negocios compleja en sus recorridos de gráficos, se vuelve prohibitivamente lento o deja de funcionar por completo.
Neo4J sabe claramente que Cypher no es así enfriamiento, ya que también proporcionan los procedimientos APOC que incluyen un expansor ruta alternativa (
apoc.path.expand
,apoc.path.subgraphAll
, etc).Gremlin es más difícil de aprender, pero es más poderoso que Cypher y APOC. Puede implementar cualquier lógica que se le ocurra en Gremlin.
Realmente deseo que Neo4J se envíe con un servidor Gremlin conmutable (por leer, este solía ser el caso). Puede hacer que Gremlin se ejecute contra una instancia de Neo4J en vivo, pero implica saltar a través de muchos aros. Mi esperanza es que dado que los competidores de Neo4J están permitiendo Gremlin como una opción, Neo4J hará lo mismo.
fuente
Cypher es un lenguaje de consulta declarativo para consultar bases de datos de gráficos. El término declarativo es importante porque es una forma diferente de programar que los paradigmas de programación como imperativo.
En un lenguaje de consulta declarativo como Cypher y SQL, le decimos al motor subyacente qué datos queremos obtener y no especificamos cómo queremos que se obtengan los datos.
En Cypher, un usuario define un subgráfico de interés en la cláusula MATCH. Luego, el motor subyacente ejecuta un algoritmo de coincidencia de patrones para buscar ocurrencias similares de subgráfico en la base de datos de gráficos.
Gremlin tiene características tanto declarativas como imperativas. Es un lenguaje de recorrido de gráficos en el que un usuario debe dar instrucciones explícitas sobre cómo navegar por el gráfico.
La diferencia entre estos lenguajes en este caso es que en Cypher podemos usar un operador de estrella de Kleene para encontrar rutas entre dos nodos dados en una base de datos de gráficos. En Gremlin, sin embargo, tendremos que definir explícitamente todos esos caminos. Pero podemos usar un operador de repetición en Gremlin para encontrar múltiples ocurrencias de tales rutas explícitas en una base de datos de gráficos. Sin embargo, hacer iteraciones sobre estructuras explícitas no es posible en Cypher.
fuente
Si usa gremlin, entonces le permitirá migrar a diferentes bases de datos de gráficos. Dado que la mayoría de las bases de datos de gráficos admiten el recorrido de gremlin, es una buena idea elegir el gremlin.
fuente
Respuesta larga y corta: use cypher para consultas y gremlin para recorrido. Verá usted mismo el tiempo de respuesta.
fuente