• 0238494791
  • spgoo.ecpy@gmail.com

Neo4J , base de données orientée graphe

Description de la mise en oeuvre de Neo4J dans le cadre du projet emolgine:

Une base Neo4J est constituée de Noeuds de différents types (label) ainsi que de relations de différents type.

Dans la base Neo4J d’emolgine, les types de noeuds définis sont les suivants:
– Molecule (pour défnir les molécules),
– Cluster_mol (pour rassembler les molécules au sein de cluster de molécules similaires),
– Site (pour définir des sites au sein d’une protéine),
– Protein (pour définir des protéines).
Ces noeuds sont reliés entre eux par les relations suivantes:
– FROM: entre Site et Protein,
– CFIT: entre Cluster_mol et Site pour indiquer que les molécules rassemblées au sein d’un cluster de molécules similaires ont de l’affinité potentielle pour un site de protéine donné.
– SMI1: entre Cluster_mol pour indiquer leur similarité,
– SIM2: entre Molecule pour indiquer leur similarité.

En utilisant la fonction “load CSV” du langage cypher, il est possible de construire une base de 2 500 000 de noeuds et 20 000 000 de relations en 20 minutes. L’ objectif est de pouvoir gérér une base contenant au moins plusieurs centaines de millions de molécules avec probablement au moins un milliard de relations.

Le site emolgine permet de lancer des requêtes sur la base Neo4J et de visualiser le résultat sous forme d’un graphe obtenu avec D3.js.

Schéma de la base de données

Réf : Building Knowledge Graphs – A practioner’s Guide O’Reilly

Caractériser le contenu de la base à partir des relations

  • MATCH ()-[r:FIT]->() RETURN count()
  • MATCH ()-[r:CFIT]->() RETURN count()
  • MATCH ()-[r:FROM]->() RETURN count(*)

Caractériser les attributs associés à la relation FIT

  • MATCH ()-[r:FIT]->() RETURN MAX(r.efficiency),MIN(r.efficiency),AVG(r.efficiency)
  • MATCH ()-[r:FIT]->() RETURN MAX(r.affinity),MIN(r.affinity),AVG(r.affinity)

Caractériser la répartition en nombre de molécules la relation FIT selon les deux attributs affinity et efficiency

  • unwind [0.25,0.386,0.522,0.658,0.794,0.93,1.066,1.202,1.338,1.474,1.61] as efficience unwind range(6,30) as affinity match ()-[r:FIT]-() where affinity<= r.affinity <affinity+1 and efficience<=r.efficiency<efficience+0.136 return affinity,efficience,count(r)

Requêtes avec retour JSON

Exécution avec production du plan d’exécution et création d’index

Exécution avec production du plan d’exécution avec les index cette fois-ci.

Explain

Profile

Quelques instructions utilises

Documentation sur une procédure : call apoc.help(“apoc.export”)

Version d’apoc : return apoc.version() as output;

Export de données:

WITH "requete " AS query  CALL apoc.export.csv.query(query,"molecules.csv",{}) 
YIELD file, source, format, nodes, relationships, properties, time, row, batchsize,batches,done, data
RETURN file, source, format, nodes, relationships, properties, time, row, batchsize,batches,done, data

Instructions classiques

Supprimer tout un ensemble de relation : MATCH ()-[n:import]-() DELETE n

Tout supprimer : MATCH (x) CALL { WITH x DETACH DELETE x }

Documentations :

Neo4J