Neo4j - Cypher vs Gremlin langage de requête
Je commence à développer avec Neo4j à l'aide de l'API REST.
J'ai vu qu'il y a deux options pour effectuer des requêtes complexes - Cypher (Neo4j le langage de requête) et Gremlin (l'objectif général graphe requête/traversée de la langue).
Voici ce que je veux savoir est-il de la requête ou de l'exploitation qui peut être fait en utilisant Gremlin et ne peut être fait avec Cypher? ou vice-versa?
Monogramme semble beaucoup plus clair pour moi que Gremlin, et en général, il semble que les gars de Neo4j vont avec Monogramme.
Mais si le Chiffre est faible comparé à Gremlin, je voudrais vraiment savoir à l'avance.
- Cypher est un non-turing langage déclaratif. Gremlin est une fantaisie wrapper sur Neo4j API Java et est un impératif. Clairement, il y a des choses possibles à faire dans gremlin que vous ne pouvez pas en monogramme.
- Apache Spark 3 comprendra Cypher, qui dit beaucoup de choses sur leur point de vue sur ce.
Vous devez vous connecter pour publier un commentaire.
Générale de l'interrogation, le Chiffre est assez et est probablement plus rapide. L'avantage de Gremlin sur Cypher est quand vous êtes dans le niveau élevé de la traversée. Dans Gremlin, vous pouvez mieux définir exactement la traversée de modèle (ou de vos propres algorithmes), tandis que dans Cypher le moteur essaye de trouver la meilleure traversée de la solution elle-même.
Personnellement, j'utilise Monogramme en raison de sa simplicité et, à ce jour, je n'ai pas eu toutes les situations où j'ai eu à utiliser Gremlin (à l'exception de travail avec Gremlin graphML d'importation/d'exportation). Je pense, cependant, que même si j'aurais besoin d'utiliser Gremlin, je le ferais pour une requête spécifique, je trouve sur le net et ne plus revenir à nouveau.
Vous pouvez toujours apprendre de Monogramme très vite (en jours) puis continuer avec le (long terme) général Gremlin.
Nous avons à parcourir des milliers de nœuds dans nos requêtes. Cypher a été lente. Neo4j équipe nous a dit que la mise en œuvre de notre algorithme directement à l'encontre de l'API Java serait de 100 à 200 fois plus rapide. Nous l'avons fait et obtenu facilement facteur 60 hors de lui. À compter de maintenant, nous n'avons pas le seul Chiffre de la requête dans notre système, en raison d'un manque de confiance. Facile Monogramme requêtes sont faciles à écrire en Java, les requêtes complexes, de ne pas accomplir. Le problème, c'est quand vous avez plusieurs conditions dans votre requête, il n'existe aucun moyen de Monogramme à dire l'ordre dans lequel effectuer les traversals. Si votre monogramme requête peut aller sauvages dans le graphique dans une mauvaise direction, d'abord.
Je n'ai pas fait beaucoup avec Gremlin, mais je ne pouvais imaginer que vous obtenez beaucoup plus de contrôle de l'exécution avec Gremlin.
La Neo4j équipe sur le Chiffre ont été vraiment impressionnant, et il est venu un long chemin. Le Néo équipe généralement pousse les gens vers elle, et comme Cypher mûrit, Gremlin sera probablement moins d'attention. Cypher est un bon choix.
Que dit - Gremlin est un Groovy DSL. L'aide par l'intermédiaire de son Neo4j le point de terminaison REST permet complet, un accès sans entrave à la sous-jacentes Neo4j API Java. Il (et d'autres script plugins dans la même catégorie) ne peut pas être égalé en termes de faible niveau de puissance. De Plus, vous pouvez exécuter Monogramme de l'intérieur le Gremlin plugin.
De toute façon, il n'y a qu'une saine chemin de mise à niveau lorsque vous apprendrez à la fois. J'irais avec celui qui vous reçoit et en cours d'exécution plus rapide. Dans mon projets, je l'utilise généralement Gremlin et ensuite appeler le Chiffre (de l'intérieur Gremlin ou pas) quand j'ai besoin de résultats sous forme de tableau ou expressive pattern matching - les deux sont une douleur dans le Gremlin DSL.
J'ai d'abord commencé à l'aide de Gremlin. Cependant, à l'époque, le RESTE de l'interface est un peu instable, donc je suis passé à les Chiffrer. Il a beaucoup plus de soutien pour Neo4j. Cependant, il existe certains types de requêtes qui sont tout simplement pas possible avec Monogramme, ou lorsque le Chiffre ne peut pas tout à fait d'optimiser la façon dont vous pouvez le faire avec Gremlin.
Gremlin est construit sur Groovy, donc vous pouvez l'utiliser comme une méthode générique permettant d'obtenir Neo4j pour exécuter 'Java' code et d'effectuer différentes tâches à partir du serveur, sans avoir à prendre le HTTP frappé par le RESTE de l'interface. Entre autres, Gremlin va vous permettre de modifier les données.
Cependant, quand tout ce que je veux, c'est les données de la requête, je aller avec Monogramme que c'est plus lisible et plus facile à maintenir. Gremlin est le secours lorsqu'une limite est atteinte.
Gremlin les requêtes peuvent être générées par programmation.
(Voir http://docs.sqlalchemy.org/en/rel_0_7/core/tutorial.html#intro-to-generative-selects savoir ce que je veux dire.)
Cela semble être un peu plus compliqué avec Monogramme.
Cypher ne fonctionne que pour les requêtes simples. Lorsque vous commencer à intégrer la logique d'entreprise complexe dans votre graphique traversals il devient trop lent ou s'arrête complètement de travailler.
Neo4J sait très bien que le Monogramme n'est pas le couper, car ils fournissent également de la APOC procédures qui incluent un autre chemin d'accès de l'expandeur (
apoc.path.expand
,apoc.path.subgraphAll
, etc).Gremlin est plus difficile à apprendre, mais il est plus puissant que Cypher et APOC. Vous pouvez mettre en œuvre toute logique, vous pouvez penser à Gremlin.
Je souhaite vraiment Neo4J livré avec un toggleable Gremlin serveur (à partir de la lecture autour de, ce qui à être le cas). Vous pouvez obtenir Gremlin cours d'exécution à l'encontre d'un live Neo4J exemple, mais il consiste à sauter à travers un grand nombre de cerceaux. Mon espoir est que, depuis Neo4J concurrents sont permettant Gremlin comme une option, Neo4J suivront.
Cypher est un déclarative langage de requête pour interroger graphique de bases de données. Le terme déclarative est important parce que c'est une façon différente de la programmation que de paradigmes de programmation comme impératif. Dans un déclarative langage de requête comme Cypher et SQL, nous dira le moteur sous-jacent de ce que les données que nous voulons aller le chercher et nous ne précisez pas la façon dont nous voulons que les données à récupérer. Dans Cypher un utilisateur définit un sous-graphe d'intérêt dans le MATCH de la clause. Puis moteur sous-jacent exécute un motif correspondant à l'algorithme de recherche le similaires occurrences de sous-graphe du graphe de la base de données. Gremlin est à la fois déclarative et impérative fonctionnalités. Il s'agit d'un graphique de la traversée de la langue, où l'utilisateur doit donner des instructions claires quant à la façon dont le graphique est à naviguer. La différence entre ces langues, dans ce cas, c'est que dans Cypher nous pouvons utiliser une étoile de Kleene opérateur de trouver des chemins entre deux nœuds dans un graphe de la base de données. Dans Gremlin cependant, nous aurons à définir explicitement tous ces chemins. Mais nous pouvons utiliser une répétition de l'opérateur dans Gremlin de trouver de multiples occurrences de ces explicite chemins dans un graphe de la base de données. Cependant, faire des itérations plus explicite des structures n'est pas possible en Monogramme.
Longue réponse courte : Utilisation de monogramme de requête et gremlin pour la traversée. Vous verrez le temps de réponse vous-même.
Si vous utilisez gremlin, alors il vous permettent de migrer les différents graphique de bases de données,
Puisque la plupart du graphique, les bases de données prend en charge le gremlin traversée de, de Son une bonne idée de choisir le gremlin.