Le blog de Fabien DUMINY

Un blog utilisant WordPress

Skip to: Content | Sidebar | Footer

Devoxx France 2013 – (Reality)-[:IS_A]->(Graph)

30 avril, 2013 (09:00) | Devoxx France 2013, Java | By: fabien

A l’occasion de Devoxx France 2013, j’ai assisté à la conférence intitulée « (Reality)-[:IS_A]->(Graph) » présentée par Florent Biville.

Intérêt d’une base de données orientée graphe

Internet, les réseaux sociaux, les réseaux de communication et les dépendances d’un projet maven constituent des exemples de graphes dans la réalité. Il existe plein d’algorithmes efficaces de recherche avec une complexité linéaire. Les graphes ont une structure simple : des noeuds reliés par des relations (orientées ou non). Dans une base de données relationnelle, il faut rajouter une table appelée table de jointure alors que ce concept est déjà présent dans un graphe.

Neo4j

Neo4j est une base de données orientée graphe, libre dans sa version community (sources sur github) et utilisant Lucene pour l’indexation. Un noeud est représenté par une liste de paires clé/valeur. Une relation est représentée par une liste de paires clé/valeur, une étiquette et un sens. Toutes les écritures sont transactionnelles (dans Neo4j une transaction a les propriétés ACID).

Pour les recherches, il ne faut pas partir de l’identifiant mais utiliser l’index. En effet, les identifiants de noeuds peuvent être recyclés. Le langage de requêtage de Neo4j se nomme cypher et ressemble à ceci :

    START person=node:Person('name: *')
    WHERE person.firstName = 'james' AND person.age > 35
    RETURN person



L’API par défaut est REST (avec une représentation json) mais il existe une couche scala et java.

En ce qui concerne l’API java, on crée une instance de la classe TraversalDescriptionImpl et, via son interface TraversalDescription, on décrit la requête en précisant la stratégie de parcours du graphe, ainsi que les noeuds recherchés. Ensuite, on lance la requête ainsi définie en précisant un ensemble de noeuds comme points de départ.

D’autre part, cypher-dsl (basé sur Querydsl) fournit un DSL pour exprimer une requête comme celle-ci :

    QPerson person = QPerson.person;
    CypherQueryDSL.start( node( "person", 1, 2, 3 ) )
                .where( person.firstName.eq( "james" ).and( person.age.gt( 35 ) ) )
                .returns( nodes( "person" ) )



Spring Data Neo4j fournit une implémentation de Spring Data permettant de faire des requêtes de type JPA sur une base de données Neo4j.

Be Sociable, Share!
Share and Enjoy

Write a comment





If your website is claim enabled, it will be notified that you have posted here.

MySQL query error