Base de données graphe et Neo4j

31
Bases de données graphe 19 janvier 2016 1

Transcript of Base de données graphe et Neo4j

Page 1: Base de données graphe et Neo4j

1

Bases de données graphe

19 janvier 2016

Page 2: Base de données graphe et Neo4j

2

PrésentationBoris Guarisma• Consultant Data Science (et Big Data)• CNAM 2013-2014:

• NFE204: Bases de données avancées (1)• NFE211 / 212: Ingénierie des systèmes décisionnels(1 et 2)• EAR206: Analyse données et décisions dans l’entreprise

• LinkedIn:• https://fr.linkedin.com/in/borisguarisma

19 janvier 2016

Page 3: Base de données graphe et Neo4j

3

Références• [1] Robinson I., Webber J, Eifrem E., “Graph Databases”, O’Reilly, 2nd edition, ISBN 9781491930892• [2] Vukotic A., Watt N., “Neo4j in Action”, Manning Publications, ISBN 9781617290763• [3] Wikipedia, “Base de données orientée graphe”,

https://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es_orient%C3%A9e_graphe• [4] Willemsen C., “Découverte de Neo4j, la base de données graphe”,

http://neoxygen.io/articles/decouverte-de-neo4j.html , version 1.1, 14-01-2015• [5] Maury F., “Pourquoi s’intéresser aux graph-databases ?”,

http://www.arolla.fr/blog/2013/10/pourquoi-sinteresser-aux-graph-databases/• [6] Fauvet C., “Nouvelles opportunités pour les données fortement connectées: La base de graphe

Neo4j”, 10 décembre 2013• [7] Robert M., Dutheil L., Domenjoud M., « Introduction aux graphes avec Neo4j et Gephi »

http://blog.octo.com/introduction-aux-graphes-avec-neo4j-et-gephi/• [8] Lyon William, Introduction to Graph Databases and Neo4j - January 14, 2016,

https://www.youtube.com/watch?v=83P81ebgCxA19 janvier 2016

Page 4: Base de données graphe et Neo4j

4

Agenda• Introduction• Problématique• Base de données graphe• Cas d’usage• Stockage et traitement graphe• Labeled property graph model• Relationnel vs graphe

19 janvier 2016

• Neo4j • Architecture• Cypher• Core API et Traversal API• Manuel utilisateur (web)• Résilience• Partitionnement• Démo

Page 5: Base de données graphe et Neo4j

5

Introduction• Les données augmentent en volume … et elles sont de plus en plus connectées.

19 janvier 2016

Page 6: Base de données graphe et Neo4j

6

ProblématiquePar rapport aux bases de données relationnelles (SGBDR): • Outils traditionnels pour la gestion des données et de leur relations.• Malgré leur nom, les SGBDR ne fonctionnent pas très bien avec le traitement ou gestion

des relations. • Un SGBDR doit utiliser des multiples jointures très coûteuses en termes de performance.• Inadaptées pour les systèmes transactionnels OLTP nécessitant des réponses en temps

réel • L'écriture des requêtes très complexes• Redéfinition du schéma si l’on souhaite ajouter de nouveaux types de données ou une

nouvelle relation, … cela prend beaucoup de temps.

19 janvier 2016

Page 7: Base de données graphe et Neo4j

7

ProblématiquePar rapport aux autres bases NoSQL (orienté document ou clé-valeur): • Il n'y a pas de structure de données pour modéliser et stocker les relations.• La plupart des bases NoSQL n’ont pas un « bon concept » de requête pour les relations.• Beaucoup ne supportent pas l’intégrité transactionnelle (ACID)

19 janvier 2016

Page 8: Base de données graphe et Neo4j

8

Bases de données graphe

• Un système de base de données graphe est un SGBD avec des méthodes CRUD (Create, Read, Update, Delete) qui expose un modèle de données sous forme de graphe.

• Une base de données graphe est optimisée pour la performance transactionnelle, conçue pour offrir de l’intégrité transactionnelle et de la disponibilité opérationnelle.

• Neo4j • diffère de certaines technologies NoSQL en étant

pleinement compatible ACID (atomicité, cohérence, isolation, durabilité).

• offre les mêmes garanties qu’un système traditionnel de base de données relationnelle.

19 janvier 2016

Page 9: Base de données graphe et Neo4j

9

Cas d’usage• Réseaux sociaux• Détection de fraude• Analyse des réseaux IT• Systèmes de recommandations• …

19 janvier 2016

Page 10: Base de données graphe et Neo4j

10

Stockage et traitement graphe

19 janvier 2016

Page 11: Base de données graphe et Neo4j

11

Stockage et traitement graphe• Stockage Graphe

• Objectif: performance et scalabilité.• Stockage des données représentées sous forme d'un graphe, avec des nœuds et des relations.• Utilisant des structures de stockage dédiées aux nœuds et relations.• Un stockage natif n’est pas supporté par des bases de données graphe qui sérialisent le graphe (sous

forme de table) pour un SGBDR, pour une base de donnés orientée objet ou pour un autre type de stockage.

19 janvier 2016

Page 12: Base de données graphe et Neo4j

12

Stockage et traitement graphe• Traitement Graphe

• Objectif: performance des traversals.• Parcours des relations grâce à des pointeurs physiques.• Système de stockage capable de fournir une adjacence entre éléments voisins : chaque voisin d'une

entité est accessible grâce à un pointeur physique.• Lecture et parcours des données sans recours à un index, en utilisant les arcs pour passer d'un nœud

à l'autre.• Les bases de données graphe profitent de l’avantage donné par l'adjacence entre éléments sans

index (index-free adjacency).

19 janvier 2016

Page 13: Base de données graphe et Neo4j

13

Labeled Property Graph Model

19 janvier 2016

• Les « property graphs » sont un type de graphe particulier dans lequel à la fois les nœuds et les relations peuvent avoir des propriétés, ce qui offre donc un modèle de données entièrement dynamique [7].

• Composés par • des nœuds• des relations• des propriétés• des libellés

Page 14: Base de données graphe et Neo4j

14

Labeled Property Graph Model• Les nœuds et relations contiennent des

propriétés sous la forme de paires clé-valeur arbitraires.

• Une relation a toujours une direction, un seul nom, et un nœud de départ et un nœud de fin.

• Les propriétés des relations fournissent • des métadonnées supplémentaires pour les

algorithmes de graphes, • une sémantique supplémentaire aux relations (y

compris une qualité et un poids), • contraintes pour les requêtes à l'exécution.

19 janvier 2016

Page 15: Base de données graphe et Neo4j

15

Relationnel vs. Graphe• Grâce aux structures internes des tables, les SGBDR sont plus adaptés à des requêtes de

type trouver toutes les entités de type X et à des opérations d’agrégation sur toutes les lignes d'une table.

• Les bases de données de graphe ne souffrent pas des mêmes problèmes de latence que les bases de données relationnelles traditionnelles, où plus il y a de données dans les tables (et dans les index), plus longues seront les opérations de jointure.

19 janvier 2016

Page 16: Base de données graphe et Neo4j

16

Relationnel vs. GrapheLatence• Avec une base de données graphe, la plupart des requêtes suivent un schéma dans

lequel un index est utilisé simplement pour trouver le(s) nœud(s) de départ. • Le reste du parcours utilise ensuite une combinaison de chasse au pointeur + pattern

matching pour rechercher les données. • La performance ne dépend pas de la taille totale de l'ensemble de données, mais

uniquement sur les données interrogées (sous-graphes). • Cela conduit à des temps de performance qui sont à peu près constant (liés à la taille de

l'ensemble de résultat), même si la taille de l'ensemble de données augmente.

19 janvier 2016

Page 17: Base de données graphe et Neo4j

17

Relationnel vs. Graphe• Relationnel

• Qui sont les amis d’Alice ? la recherche via l’index global possède généralement une complexité en temps de O(log n).

• Qui est ami avec Alice ? lorsque l’on effectue une recherche dans le sens opposé de celui à partir duquel l’index à été construit, on doit effectuer plusieurs recherches via l’index pour chaque personne (ami potentiel d’Alice), pour un coût total de O(m log n).

19 janvier 2016

Page 18: Base de données graphe et Neo4j

18

Relationnel vs. Graphe• Graphe

• Illustration de l'adjacence entre éléments sans index (index-free adjacency).• Pour trouver les amis de Alice, nous suivons tout simplement ses relations FRIEND sortants, chacune avec

un coût O(1). • Pour trouver qui est ami avec Alice, nous suivons tout simplement toutes les relations FRIEND entrants

d'Alice, chacune avec un coût de O(1), pour un coût total de O(m).

19 janvier 2016

Page 19: Base de données graphe et Neo4j

19

Neo4j• Neo Technology, leader mondial des bases de données Graph• Editeur de la base de données graphe Neo4j depuis 2000• QG à Palo Alto (CA) aux USA, ingénierie à Malmö en Suède• Présence en France, Allemagne, Angleterre, Suède, USA, Grèce et Malaisie• 100,000+ utilisateurs (il y a un an …)• Top 500 clients: Adobe, Cisco, Deutsche Telecom, Telenor, SFR, Lockheed Martin, etc.• Support global 24/7• Partenaires locaux ou globaux tells que Accenture• Partenaires technologiques tells que VMWare, Informatica et Microsoft

19 janvier 2016

Page 20: Base de données graphe et Neo4j

20

Neo4j

19 janvier 2016

Page 21: Base de données graphe et Neo4j

21

Neo4j

19 janvier 2016

Page 22: Base de données graphe et Neo4j

22

Neo4j• Architecture

• Le Core API est une API Java qui expose les primitives de graphe des nœuds, des relations, des propriétés et des libellés à l'utilisateur.

• Neo4j possède un langage de requête puissant, Cypher, qui permet d’interroger le graphe pour obtenir toutes sortes d’informations sur les nœuds, leurs liens et le contenu de ces derniers.

• Le Traversal ou parcours de graphe est un processus qui visite les nœuds dans le graphe en suivant les relations entre les nœuds d'une manière particulière.

19 janvier 2016

Page 23: Base de données graphe et Neo4j

23

Neo4j - Cypher

19 janvier 2016

Page 24: Base de données graphe et Neo4j

24

Neo4j – Core API & Traversals

19 janvier 2016

Page 25: Base de données graphe et Neo4j

25

Neo4j• Manuel utilisateur (web)

19 janvier 2016

• File buffer cache• Object cache:

• References caches• High-Performance Cache

• File Sizes• Read speed• Write sped• Data size

Page 26: Base de données graphe et Neo4j

26

Neo4j• Résilience: haute disponibilité

• Le plus souvent, nous regroupons les instances de base de données pour une haute disponibilité. • Neo4j utilise une structure de cluster maître-esclave pour garantir qu'une réplique complète du

graphe est stocké sur chaque machine. • Les écritures sont répliquées à partir du maître vers les esclaves à des intervalles fréquents. • À tout moment, le maître et quelques esclaves auront une copie complètement à jour du graphe,

tandis que d'autres esclaves se rattraperont (généralement, ils seront en retard de quelques millisecondes).

19 janvier 2016

“Understanding Neo4j Scalability”

(Jan 2013)

Page 27: Base de données graphe et Neo4j

27

Neo4j• Scalabilité: sharding

• S'il faut dépasser la capacité d'un cluster, nous pouvons partitionner le graphe sur plusieurs instances de la base via la construction d'une logique de sharding dans l'application.

• Le sharding implique l'utilisation d'un identifiant synthétique pour la jointure des données sur plusieurs instances de la base au niveau applicatif.

• Comment cela s'effectuera dépend beaucoup de la forme du graphe. Certains graphes se prêtent très bien à ce cas avec des « frontières pratiques ». Bien sûr, pas tous les graphes ont des « frontières » si évidentes.

• L'objectif futur de la plupart des bases de données graphe est d'être capable de partitionner un graphe sur plusieurs machines sans intervention au niveau de l'application, de sorte que l'accès en lecture et en écriture sur le graphe puisse être scalable horizontalement.

• Dans le cas général, cela est connu pour être un problème NP-dur, et donc impossible à résoudre.

19 janvier 2016

“On Sharding Graph Databases”

(Feb 2011)

“Understanding Neo4j Scalability”

(Jan 2013)

Page 28: Base de données graphe et Neo4j

28

BACKUP SLIDES

19 janvier 2016

Page 29: Base de données graphe et Neo4j

29

BACKUP SLIDES

19 janvier 2016

• la réplication• la réplication n'est pas une distribution !!• c'est une copie des données qui sert avant tout à assurer la redondance, donc la protection contre la

perte de données• tolérance aux pannes, distribution des lectures, des écritures• théorème CAP: compromis entre cohérence, disponibilité, tolérance au partitionnement

• cohérence synchrone, un maître (SGBDR)• cohérence asynchrone, un maître

• cohérence faible• cohérence à terme (EM: eventual consistency) e.g. MongoDB

• cohérence asynchrone, plusieurs maîtres• cohérence faible e.g. CouchDB• cohérence à terme (EM: eventual consistency) e.g. Cassandra

• disponibilité: élection d’un maître si ce dernier tombe en panne• tolérance au partitionnement: élection d’un maître si cluster est coupé en deux parties

Page 30: Base de données graphe et Neo4j

30

BACKUP SLIDES

19 janvier 2016

• le sharding ou partionnement• découper une (grande) collection en fragments en fonction d’une clé• placer chaque fragment sur un serveur• maintenir un répertoire indiquent que telle clé se trouve dans tel fragment sur tel serveur• le partionnement apporte la répartition de charge (load balancing)• il doit être dynamique (ajout/retrait de serveurs) pour s’adapter « élastiquement »• s’applique à des collections de paires (clé, valeur), où valeur est n’importe quelle information structurée• distribution avec maître

• partitionnement par intervalle e.g. MongoDB, Hbase, Cassandra, Redis• l’index est tout petit par rapport à la collection• le « routeur » reçoit les requêtes et détermine le(s) serveur(s) à solliciter

• distribution sans maître• partitionnement par hachage e.g. memcached, Dynamo• faire hachage cohérent (consistent hashing)

Page 31: Base de données graphe et Neo4j

31

BACKUP SLIDES• Labeled Property Graph Model

• Tous les nœuds ont un libellé Asset en plus d’un libellé plus spécifique e.g., Database, VM, App, Server, Rack, LoadBalancer.

19 janvier 2016