{"id":505,"date":"2024-06-17T10:32:06","date_gmt":"2024-06-17T08:32:06","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=505"},"modified":"2025-01-16T18:03:44","modified_gmt":"2025-01-16T17:03:44","slug":"bdd-neo4j","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=505","title":{"rendered":"BDD &#8211; Neo4J"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span> , base de donn\u00e9es orient\u00e9e graphe<\/h2>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Description de la mise en oeuvre de <span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span> dans le cadre du projet emolgine:<\/strong><\/p>\n\n\n\n<p>Une base <span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span> est constitu\u00e9e de Noeuds de diff\u00e9rents types (label) ainsi que de relations de diff\u00e9rents type.<\/p>\n\n\n\n<p>Dans la base <span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span> d&#8217;emolgine, les types de noeuds d\u00e9finis sont les suivants: <br>&#8211; Molecule (pour d\u00e9fnir les mol\u00e9cules),<br>&#8211; Cluster_mol (pour rassembler les mol\u00e9cules au sein de cluster de mol\u00e9cules similaires),<br>&#8211; Site (pour d\u00e9finir des sites au sein d&#8217;une prot\u00e9ine),<br>&#8211; Protein (pour d\u00e9finir des prot\u00e9ines).<br>Ces noeuds sont reli\u00e9s entre eux par les relations suivantes:<br>&#8211; FROM: entre Site et Protein,<br>&#8211; CFIT: entre Cluster_mol et Site pour indiquer que les mol\u00e9cules rassembl\u00e9es au sein d&#8217;un cluster de mol\u00e9cules similaires ont de l&#8217;affinit\u00e9 potentielle pour un site de prot\u00e9ine donn\u00e9.<br>&#8211; SMI1: entre Cluster_mol pour indiquer leur similarit\u00e9,<br>&#8211; SIM2: entre Molecule pour indiquer leur similarit\u00e9.<\/p>\n\n\n\n<p>En utilisant la fonction &#8220;load CSV&#8221; 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&#8217; objectif est de pouvoir g\u00e9r\u00e9r une base contenant au moins plusieurs centaines de millions de mol\u00e9cules avec probablement au moins un milliard de relations.<\/p>\n\n\n\n<p>Le site emolgine permet de lancer des requ\u00eates sur la base <span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span> et de visualiser le r\u00e9sultat sous forme d&#8217;un graphe obtenu avec D3.js.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Sch\u00e9ma de la base de donn\u00e9es <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"817\" height=\"1049\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/10\/emolgine-1.webp\" alt=\"\" class=\"wp-image-1575\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/10\/emolgine-1.webp 817w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/10\/emolgine-1-234x300.webp 234w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/10\/emolgine-1-798x1024.webp 798w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/10\/emolgine-1-768x986.webp 768w\" sizes=\"auto, (max-width: 817px) 100vw, 817px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-c6e64cd08e00f9c8c2bc483c77e92e51\">Exemples et explications des requ\u00eates utilis\u00e9es \u00e0 partir de ce sch\u00e9ma en Cypher.<\/p>\n\n\n\n<p>R\u00e9f : Building Knowledge Graphs &#8211; A practioner&#8217;s Guide O&#8217;Reilly <\/p>\n\n\n\n<p>Caract\u00e9riser le contenu de la base \u00e0 partir des relations <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MATCH ()-[r:FIT]-&gt;() RETURN count(<em>) <\/em><\/li>\n\n\n\n<li><em>MATCH ()-[r:CFIT]-&gt;() RETURN count(<\/em>)<\/li>\n\n\n\n<li>MATCH ()-[r:FROM]-&gt;() RETURN count(*)<\/li>\n<\/ul>\n\n\n\n<p>Caract\u00e9riser les attributs associ\u00e9s \u00e0 la relation FIT <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>MATCH ()-[r:FIT]-&gt;() RETURN MAX(r.efficiency),MIN(r.efficiency),AVG(r.efficiency)<\/li>\n\n\n\n<li>MATCH ()-[r:FIT]-&gt;() RETURN MAX(r.affinity),MIN(r.affinity),AVG(r.affinity)<\/li>\n<\/ul>\n\n\n\n<p>Caract\u00e9riser la r\u00e9partition en nombre de mol\u00e9cules la relation FIT selon les deux attributs affinity et efficiency<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>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&lt;= r.affinity &lt;affinity+1 and efficience&lt;=r.efficiency&lt;efficience+0.136 return affinity,efficience,count(r)<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"607\" height=\"529\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/Capture-decran-du-2024-07-15-16-59-30.png\" alt=\"\" class=\"wp-image-1220\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/Capture-decran-du-2024-07-15-16-59-30.png 607w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/Capture-decran-du-2024-07-15-16-59-30-300x261.png 300w\" sizes=\"auto, (max-width: 607px) 100vw, 607px\" \/><\/figure>\n<\/div>\n\n\n<p>Requ\u00eates avec retour JSON <\/p>\n\n\n\n<p class=\"has-light-green-cyan-color has-text-color has-link-color wp-elements-d959ad1740f8cdb25bdd0d64a00689d9\">MATCH (csite:Cluster_mol_site)&lt;-[x:FIT]-(mol:Molecule) RETURN csite.id as Site, collect(mol.id) AS molecules LIMIT 5<\/p>\n\n\n\n<p class=\"has-pale-cyan-blue-color has-text-color has-link-color has-medium-font-size wp-elements-8ef1104673469b94af27e966e69572e5\">Optimisation de la requ\u00eate de la r\u00e9partition<\/p>\n\n\n\n<p>Ex\u00e9cution avec production du plan d&#8217;ex\u00e9cution et cr\u00e9ation d&#8217;index <\/p>\n\n\n\n<p class=\"has-light-green-cyan-color has-text-color has-link-color wp-elements-0eac79eefb370e2b4a6154daa5065707\"><br>PROFILE 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&lt;= r.affinity &lt;affinity+1 and efficience&lt;=r.efficiency&lt;efficience+0.136 return affinity,efficience,count(r)<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"486\" height=\"1024\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan-486x1024.png\" alt=\"\" class=\"wp-image-1230\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan-486x1024.png 486w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan-142x300.png 142w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan-729x1536.png 729w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan.png 763w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"has-light-green-cyan-color has-text-color has-link-color wp-elements-f5e6ff98f7fd0228a7c37b57ea2477b4\">create index fitrelationaffinity for ()-[r:FIT]-() on r.affinity<\/p>\n\n\n\n<p class=\"has-light-green-cyan-color has-text-color has-link-color wp-elements-872085c8d2c68c17244e134e04006c33\">create index fitrelationefficiency for ()-[r:FIT]-() on r.efficiency<\/p>\n\n\n\n<p>Ex\u00e9cution avec production du plan d&#8217;ex\u00e9cution avec les index cette fois-ci.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-center\">Explain<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"743\" height=\"1024\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan2-743x1024.png\" alt=\"\" class=\"wp-image-1240\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan2-743x1024.png 743w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan2-218x300.png 218w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan2-768x1059.png 768w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan2.png 840w\" sizes=\"auto, (max-width: 743px) 100vw, 743px\" \/><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"has-text-align-center\">Profile<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"525\" height=\"1024\" src=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1-525x1024.png\" alt=\"\" class=\"wp-image-1229\" srcset=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1-525x1024.png 525w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1-154x300.png 154w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1-768x1499.png 768w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1-787x1536.png 787w, https:\/\/spgoo.org\/wp-content\/uploads\/2024\/07\/plan1.png 835w\" sizes=\"auto, (max-width: 525px) 100vw, 525px\" \/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<p>Quelques instructions utilises <\/p>\n\n\n\n<p>Documentation sur une proc\u00e9dure : call apoc.help(&#8220;apoc.export&#8221;)<\/p>\n\n\n\n<p>Version d&#8217;apoc : return apoc.version() as output;<\/p>\n\n\n\n<p>Export de donn\u00e9es: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WITH \"requete \" AS query  CALL apoc.export.csv.query(query,\"molecules.csv\",{}) \nYIELD file, source, format, nodes, relationships, properties, time, row, batchsize,batches,done, data\nRETURN file, source, format, nodes, relationships, properties, time, row, batchsize,batches,done, data<\/code><\/pre>\n\n\n\n<p>Instructions classiques <\/p>\n\n\n\n<p>Supprimer tout un ensemble de relation : MATCH ()-[n:import]-() DELETE n<\/p>\n\n\n\n<p>Tout supprimer : MATCH (x) CALL { WITH x DETACH DELETE x }<\/p>\n\n\n\n<p>Documentations :<\/p>\n\n\n\n<p><a href=\"https:\/\/spgoo.org\/wp-content\/uploads\/2024\/08\/docneo4j_w_java135.pdf\"><span class='tooltipsall tooltipsincontent classtoolTips5'>Neo4J<\/span><\/a><\/p>\n<script type=\"text\/javascript\"> toolTips('.classtoolTips5','<a style=\"text-decoration: none;\" href=\"https:\/\/neo4j.com\/\"><img style=\"width: 180px; height: 50px;\" src=\"\/wp-content\/uploads\/2025\/01\/Neo4j-logo_color.png\" \/><\/a>'); <\/script>","protected":false},"excerpt":{"rendered":"<p>Neo4J , base de donn\u00e9es orient\u00e9e graphe Description de la mise en oeuvre de Neo4J dans le cadre du projet emolgine: Une base Neo4J est constitu\u00e9e de Noeuds de diff\u00e9rents types (label) ainsi que de relations de diff\u00e9rents type. Dans la base Neo4J d&#8217;emolgine, les types de noeuds d\u00e9finis sont les suivants: &#8211; Molecule (pour [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-505","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=505"}],"version-history":[{"count":28,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/505\/revisions"}],"predecessor-version":[{"id":4644,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/505\/revisions\/4644"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}