La conférence Devoxx 2013 à Paris s’est ouverte sur une présentation de Neo4j, une base de donnée orientée Graphes. Retour sur les principales fonctionnalités de ce puissant outil.

Création du graphe
Tout commence par l’import ou la création du graphe en y ajoutant nœuds, relations entre ces nœuds et propriétés sur ces nœuds et relations. Neo4j fourni pour ça une API java de type DSL relativement intuitive. Soulignons que toutes les opérations de modification du graphe s’effectuent en mode transactionnel ce qui n’est pas toujours le cas en NoSQL.
Requêtage
Pour effectuer une recherche il faut d’abord sélectionner un point d’entrée sur le graphe puis décrire le pattern recherché. Par exemple, rechercher toutes les personnes qui ont une relation de type “est ami” avec le point d’entrée sélectionné, ce qui donne par exemple :

{
 "paged_traverse" : "http://localhost:7474/db/data/node/1/paged/traverse/{?pageSize,leaseTime}",
 "outgoing_relationships" : "http://localhost:7474/db/data/node/1/relationships/out",
[...]
 "create_relationship" : "http://localhost:7474/db/data/node/1/relationships",
  "data" : {"prenom":"Stéphane"}
}

Sachez que par défaut, l’algorithme de sélection du point d’entrée repose sur Lucene, ce qui vous garantit de bonnes performances. En complément des critères de sélection habituels tels que l’égalité ou l’inclusion, Neo4j inclut des algorithmes de recherche bien connus de la théorie des graphes. Le plus court chemin, Dijkstra ou encore A* pourront ainsi être employés pour le calcul d’itinéraires.


Comme expliqué lors de la présentation, d’une certaine manière tout peut être représenté sous forme de graphe et finalement une base de donnée relationnelle n’est ni plus ni moins qu’un graphe :)
Soit, mais au delà des fonctionnalités mises en avant il reste un certain nombre d’aspects sur lesquels le monde SQL a beaucoup d’avance comme par exemple en terme de visualisation des données, de migration de données ou encore de monitoring.

Il n’empêche, Neo4j est une réelle option à étudier lorsqu’il s’agit de détecter des “patterns” sur des graphes ayant une topologie complexe : réseaux (sociaux et autres), calculs d’itinéraires, de flux, etc.

Lire l’article complet.