GrapheekDB
Base de données Graphe en Python
Raphaël Braud
https://bitbucket.org/nidusfr/grapheekdb
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
GrapheekDB
- 1,928