GrapheekDB

Base de données Graphe en Python

Raphaël Braud

https://bitbucket.org/nidusfr/grapheekdb

https://pypi.python.org/pypi/grapheekdb

@raf37

@nidus_fr

Base de données graphe ?

Cf Wikipedia :

Une base de données orientée graphe est une base de données :

  • Orientée objet utilisant la théorie des graphes
  • => avec des noeuds et des liens
  • permettant de représenter et stocker les données.

Mais encore ?

Une base de données graphe est capable de fournir une information d'adjacence entre éléments voisins

  • chaque voisin d'une entité est accessible grâce à un pointeur physique.
  • C'est une base de données orientée objet adaptée à l'exploitation des structures de données de type graphe ou dérivée, comme des arbres.

Quelques exemples de graphe

  • La toile d'araignée mondiale (aka www)
  • Les réseaux sociaux
  • Les réseaux routiers
  • Les réseaux informatiques
  • Et forcément ....
  • Les réseaux de Nidus
  • Bref, les réseaux
  • Mais aussi ....
  • Les arbres généalogiques
  • Les organisations territoriales (pays/région/département/préfecture/.../ville/quartier/rue/adresse)

Modélisation par graphe

Les "pré-requis"

Soyez attentifs, ça va être long !!!

  • On peut identifier des "entités" (appelé Noeud ou Vertex)
  • Il y a des relations entre ces entités (appelées Liens)
  • Voila...Voila...

Graphe VS Relationnel

Non ceci n'est pas un troll

Relationnel > Graphe (1/3)

  • Elles sont particulièrement adaptées aux données avec une structure de tableaux
  • Optimisation de l'espace physique :
    • Il n'est pas nécessaire de stocker des "pointeurs" d'adjacence

Graphe VS Relationnel

Relationnel > Graphe (2/3)

  • La rigidité des bases de données relationnelles est aussi une des ses forces :
    • Chaque enregistrement d'une table donnée possède un ensemble d'attributs prédéfinis
  • Ce qui simplifie de nombreuses optimisations (indexation/recherche/représentation physique)

Relationnel > Graphe (3/3)

  • Issues de l'algèbre relationnelle, elles permettent :
    • Les intersections
    • Les jointures
    • Les produits cartésiens
    • Liste longue et fastidieuse [...]
  • Contrairement aux bases graphes, il y a une "norme" permettant de les interroger (SQL)

En 2010 le modèle de données relationnel est utilisé dans la grande majorité des bases de données (wikipedia)

Graphe > Relationnel

  • Les éléments adjacents sont représentés par des pointeurs
  • Elles simplifient les parcours de liens et optimisent le temps de parcours
  • Elles sont particulièrement adaptées aux données fortement connectées
  • Elles rendent plus simple l'écriture d'algorithmes de graphe :
    • Recherche du chemin le plus court (Dijkstra/A*)
    • Centralité/Influence (Eigenvector/PageRank)
    • Algorithmes de recommandation
    • Découverte de communauté (K-Clique)
    • Moteur d'inférence

Etat du "marché" des bases graphes (1/2)

  • Neo4j - Java - GPL V3
  • Titan - Java - Apache 2
  • ArangoDB - C/C++/Javascript - Apache 2 - Multi modèle
  • OrientDB - Java - Apache 2

"La connaissance de Java est un plus"

> Je n'ai qu'une vie...

Etat du "marché" des bases graphes (2/2)

  • Pas de dialecte commun (à la SQL)
  • Cependant le DSL Gremlin développé par TinkerPop permet de s'adresser à des bases de données graphe de façon unifiée
  • Il faut utiliser un "driver"
  • Mais toutes les bases graphes majeures sont supportées
  • Développé en Groovy, il permet de retrouver une expèrience similaire au REPL (Read–Eval–Print-Loop) de Python
  • Grâce à Bulbflow, on peut développer directement en Python

Dans l'écosystème Python

  • Networkx
  • Bulbflow
  • Beaucoup de librairies clientes pour les bases de données Java
  • GrapheekDB

GrapheekDB

  • Stockage de graphe orienté
  • "Document store"
  • Utilisation de plusieurs backends de type KVS

Fonctionnalités

  • Parcours de chemin ("pathology")
  • Lookups
  • Aliasing et collecte de données
  • Aggrégation de données
  • Indexation des noeuds et des liens
  • Utilisation en client/serveur
  • Accés concurrents

GrapheekDB - Objectifs

  • Rapidité (grâce aux KVS et à la dénormalisation)
  • Stabilité (large couverture)
  • Familiarité (avec Django et Gremlin)
  • PYTHON !!!
  • PYTHON !!!
  • PYTHON !!!
  • :D

DEMO

Le notebook est disponible à l'adresse suivante

https://bitbucket.org/nidusfr/grapheekdb/raw/default/notebooks/tutorial1.ipynb

GrapheekDB

By Raphaël Braud