IndexMed - Séminaire IndexMed 2016
Transcription
IndexMed - Séminaire IndexMed 2016
IndexMed Visualisation des données sous forme de graphes 1 Sommaire Bases de données orientées graphe Introduction à Neo4j Neo4J dans IndexMed IndexMed Web Quelques résultats Prérequis 2 Bases de données orientées graphes 1464096862 Bases de données dont la spécificité est la visualisation sous forme de graphe - Des nœuds composés de propriétés de type clé / valeur - Des relations (orientées ou pas) version 3 Bases de données orientées graphes 1464096862 Pourquoi utiliser des BD orientées graphes ? – Représentation visuelle – Rapidité d'analyse – Mise en avant de certaines données – Possibilité de traiter de gros volumes de données – Flexibilité du schéma (les propriétés peuvent évoluer) 4 Analogie Base relationnelle / Base graphe 1464096862 5 Introduction à Neo4J Bases de données orientées graphes Licence GPL – Compatible Linux, Mac, Windows Moteur en java Repose sur le principe des nœuds, propriétés et relations Meta-nœud Langage de requête : CYPHER Interface web V2 : limite 34 milliards de nœuds V3 : illimité 6 Introduction à Neo4J 7 Introduction à Neo4J Langage cypher – exemples de requêtes Afficher une photo avec les espèces liées à la photo: LANGAGE SQL : SELECT * FROM PHOTO INNER JOIN JOINTURE ON PHOTO.id_photo = JOINTURE.id_photo INNER JOIN ESPECE ON JOINTURE.id_espece = ESPECE.id_espece WHERE PHOTO.Source = 'CIGESMED_FTF_2014091' LANGAGE CYPHER : MATCH (pic:PHOTO)-[r:CONTIENT]->(e:ESPECE) WHERE pic.Source = ‘CIGESMED_FTF_2014091’ RETURN pic,r,e 8 Introduction à Neo4j Calcul du chemin le plus court : MATCH ()-[r:TRAVEL]->() RETURN r LIMIT 25 9 Introduction à Neo4j Calcul du chemin le plus court : MATCH (Jamet:Stop {name:’Jamet’}), (Commerce: Stop {name:’Commerce’}), p=shortestPath((Jamet)-[*]-(Commerce)) return p 10 Introduction à Neo4j Les différents langages compatibles avec neo4j Neo4j retourne les données au format JSON 11 Neo4j dans Indexmed Pourquoi Neo4J ? Approprié pour des jeux de données hétérogènes Solution de référence dans le domaine des BD graphes Intégration dans Indexmed Avoir une interface web spécifique au projet Système de requêtage simplifié 12 IndexMed Web http://data.imbe.fr/neo4j 13 Prérequis Normalisation de l’architecture des données : • Nom des champs normalisés dans les CSV • 1 CSV = 1 nœud ou 1 relation • Contrainte sur les champs (unique ou pas) • Ne pas référencer plusieurs informations dans un même champs (Par exemple, on ne peut pas avoir René Dupont dans un champ Client. Il faut décomposer en deux champs Nom et Prénom) Normalisation de la donnée : • Ne pas laisser de champs vide (données moins consistantes) • Format des dates 14 Neo4j dans IndexMed Import d’un CSV : # Validation à intervalle régulier USING PERIODIC COMMIT 500 # ligne == ligne traitée par les commandes cypher qui suivront # fieldterminator = champs séparés par ; LOAD CSV WITH HEADERS FROM ‘//home/jlecubin/test.csv’ AS ligne FIELDTERMINATOR ‘;’ # Creation nœud Endroit et un champ id dont la valeur == colonne id du CSV # MERGE == CREATE ou UPDATE selon absence ou présence du noeud MERGE (ou:Endroit {id: ligne.id}) # Ajout propriétés sur les noeuds SET ou.numero = TOINT(ligne.numero) SET ou.nomVoie = ligne.nom_voie # Convertion de la valeur en float SET ou.lon = TOFLOAT(ligne.lon) SET ou.lat = TOFLOAT(ligne.lat) MERGE (comm:Commune {codePostal: TOINT(ligne.’code_post’) }) SET comm.nom == ligne.nom_commune MERGE (ville:Ville {libelle: ligne.libelle_acheminement }) SET ville.codeDepartement = left(ligne.’code_post’,2) # Création de la relation APPARTIENT_A de la commune vers la ligne MERGE (comm)-[:APPARTIENT_A]->(ville) MERGE (ou)-[:SITUE_DANS]->(comm) 15