Cypher : le langage pour manipuler des données dans les graphes

-
4
 m de lecture
-

Pour l'homme, la compréhension visuelle est souvent plus facile que la compréhension textuelle, car notre cerveau est capable de traiter les informations visuelles plus rapidement et plus efficacement. C’est pour cette raison que nous avons pu voir l’émergence des bases de données graphiques utilisant le langage Cypher au lieu du traditionnel SQL.

Les bases de données visuelles offrent un moyen beaucoup plus rapide et intuitif de modéliser et d’interroger les données. Inventé en grande partie par Andrés Taylor, un employé travaillant sur Neo4j, le langage a été conçu en gardant à l’esprit la puissance et la capacité de SQL tout en permettant aux utilisateurs de voir visuellement les résultats de leur requête.

Cypher est un langage graphique très facile à apprendre en raison de sa similitude avec d’autres langages et de son intuitivité. Pour une entreprise, il est important de choisir le bon outil qui soit à la fois simple à utiliser et puissant pour répondre aux besoins lors de l’évolution des applications. C’est pour cela que Neo4j est utilisé par de grandes entreprises comme Michelin, NASA, Crédit Agricole et Volvo. Découvrez dans cet article, la force de ce langage.

Comment fonctionne Cypher ?

Cypher a été conçu spécifiquement pour travailler avec des bases de données de graphes. Le vocabulaire et la syntaxe utilisée sont optimisés pour aider les utilisateurs à comprendre comment leur requête fonctionne et comment les résultats sont générés.

Comme le langage SQL, les entités et les relations sont aussi présentes dans Cypher mais sous une forme différente : les entités sont représentées par des nœuds tandis que les relations sont sous la forme d’arête. En affichant ces éléments sous forme de graphiques, les utilisateurs peuvent visualiser les relations et les connexions entre les éléments d’un système complexe. Cela rend le langage très intuitif pour les utilisateurs pour comprendre la structure des données de graphes et formuler des requêtes Cypher plus efficacement.

Quelles différences entre Cypher et SQL ?

SQL existe depuis longtemps, c’est un langage puissant, mais il y a des choses qui sont plus à faire avec Cypher. Nous allons maintenant voir la différence entre les requêtes SQL et Cypher. La syntaxe de Cypher ressemble à celle d’un langage de requête SQL classique mais diffère sur quelques points. Nous allons prendre l’exemple d’une requête qui va renvoyer en résultat uniquement les personnes nées après 1998.

Requête SQL :

SELECT person.name

FROM person

WHERE personne.birthdate > 1998;

Requête Cypher :

MATCH (person:Person)

WHERE person.birthdate > 1998

RETURN person.name;

Comme vous pouvez le voir, les requêtes Cypher commencent toujours par le mot-clé « MATCH » à la place de « SELECT » pour le langage SQL, suivi d’une clause « WHERE » pour filtrer les résultats et enfin « RETURN » pour spécifier les données à renvoyer.

La différence entre les deux langages pour les bases de données va se voir pour les relations entre les entités.

En Cypher, une relation est une arête qui relie deux nœuds dans un graphe. Les relations sont représentées par des tirets ( – ) entre les nœuds. Chaque relation peut avoir une direction, représentée par une flèche ( -> ou <- ). Cette dernière indique la direction dans laquelle la relation peut être parcourue. Par exemple, la relation « LOVES » peut être représentée par:

Nous pouvons voir qu’il y a une relation « LOVES » qui part du nœud 1 et pointe vers le nœud 2. Il est également possible d’ajouter des propriétés aux relations ou nœuds pour stocker des informations supplémentaires. Les propriétés sont représentées par des accolades et peuvent être ajoutées après la relation. Dans cet exemple, nous cherchons les personnes qui sont aimées par une personne nommée « Dan ».

Grâce aux relations de Cypher, il est plus facile et intuitif d’effectuer des requêtes vers la base de données. Écrivons quelques requêtes pour alimenter une base de données, à la différence de SQL, il n’est pas nécessaire de définir au préalable le schéma. C’est nos requêtes d’insertions de données qui vont définir l’architecture de notre base de données. Créons tout d’abord quelques nœuds représentant des personnes dans notre base de données:

CREATE (:Person {name: 'Daniel', age: 40})

CREATE (:Person {name: 'Julia', age: 25})

CREATE (:Person {name: Bob'', age: 35})

Une fois ces nœuds ajoutés à notre base de données représentant une personne possédant un nom et un âge, nous pouvons créer des relations entre eux. Contrairement au langage SQL, nous pouvons très facilement relier nos nœuds. Par exemple, nous voulons que Daniel soit amoureux de Julia et qu’il soit ami avec Bob, il est possible de le faire avec Cypher à l’aide des requêtes suivantes :

MATCH (daniel:Person {name: 'Daniel'}), (julia:Person {name: 'Julia'})

CREATE (daniel)-[:LOVES]->(julia)



MATCH (daniel:Person {name: 'Daniel'}), (bob:Person {name: 'Bob'})

CREATE (daniel)-[:FRIEND]->(bob)

A contrario, avec le langage SQL, il faudrait tout d’abord créer trois entités (Person, Friendship et Love) puis ajouter les valeurs dans les tables afin de les connecter. 

Une fois les données ajoutées, nous pouvons voir qu’il est plus facile de faire des requêtes avec Cypher que SQL. Si nous voulons voir les amis de Daniel, il est possible de le faire avec les commandes suivantes pour les deux langages :

Requête SQL :

SELECT p.name

FROM Person p

JOIN Friendship f ON p.id = f.id

WHERE f.name = ‘Daniel’;

Requête Cypher :

MATCH (daniel:Person {name: 'Daniel'})-[:FRIEND]->(friend)

RETURN friend.name

Nous pouvons voir que les requêtes Cypher sont beaucoup moins longues que les instructions SQL et nettement plus simples à comprendre, ce qui permet de réduire les risques d’erreur.

En conclusion

Cypher est un langage puissant qui permet aux développeurs de faire des requêtes complexes sur des bases de données orientées graphes. Sa syntaxe claire et concise en fait également un excellent choix pour les utilisateurs qui ne sont pas familiers avec les bases de données graphiques et qui souhaitent apprendre à interagir avec elles. La maîtrise de Neo4j et Cypher est au programme du module « Base de données » de la formation Data Engineer de DataScientest au même titre que le langage SQL, MongoDB, Elasticsearch et Cassandra. N’hésitez pas à consulter notre page de formation pour en savoir plus.

Facebook
Twitter
LinkedIn

DataScientest News

Inscrivez-vous à notre Newsletter pour recevoir nos guides, tutoriels, et les dernières actualités data directement dans votre boîte mail.

Vous souhaitez être alerté des nouveaux contenus en data science et intelligence artificielle ?

Laissez-nous votre e-mail, pour que nous puissions vous envoyer vos nouveaux articles au moment de leur publication !

Newsletter icone
icon newsletter

DataNews

Vous souhaitez recevoir notre
newsletter Data hebdomadaire ?