{"id":1179,"date":"2024-07-31T11:43:17","date_gmt":"2024-07-31T09:43:17","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1179"},"modified":"2024-07-31T11:45:50","modified_gmt":"2024-07-31T09:45:50","slug":"06-bds-orientadas-a-grafos","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/databases\/nosql\/06-bds-orientadas-a-grafos\/","title":{"rendered":"06. BDs orientadas a grafos"},"content":{"rendered":"\n<p>Estas <strong>BDs<\/strong> est\u00e1n creadas para dise\u00f1ar y analizar datos en forma de <strong>grafos.<\/strong> En <strong>grafos<\/strong> los datos se presentan como nod<strong>o<\/strong>s, muy comparable a un <strong>esquema de redes neuronales<\/strong> o de <strong>computaci\u00f3n.<\/strong> La relaci\u00f3n entre los <strong>nodos<\/strong> va a representarse como las <strong>aristas.<\/strong> A los <strong>nodos<\/strong> se los denomina <strong>v\u00e9rtices,<\/strong> y a las <strong>aristas<\/strong> se las denomina <strong>bordes.<\/strong><\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Caracter\u00edsticas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Basadas en grafos<\/strong>: especializadas en relaciones basadas en an\u00e1lisis de datos, para <strong>IA.<\/strong><\/li>\n\n\n\n<li>Las relaciones y propiedades que se generan en ellos dotan de una relaci\u00f3n m\u00e1s basta que en una relaci\u00f3n transaccional, gracias a su esquema no tan r\u00edgido.<\/li>\n\n\n\n<li>Las consultas y el an\u00e1lisis est\u00e1n optimizados para realizar consultas complejas que siguen diferentes caminos.<\/li>\n\n\n\n<li>La <strong>flexibilidad<\/strong> y <strong>escalabilidad<\/strong> son puntos importantes, nos permiten trabajar con gran cantidad de informaci\u00f3n.<\/li>\n\n\n\n<li>Descubrimiento de <strong>patrones<\/strong> y <strong>recomendaciones.<\/strong><\/li>\n\n\n\n<li>En la detecci\u00f3n de fraudes se utiliza este <strong>modelo de datos.<\/strong><\/li>\n\n\n\n<li>Integraci\u00f3n de lenguajes espec\u00edficos, dependiendo del sistema gestor de bases que se use.<\/li>\n<\/ul>\n\n\n\n<p>Algunas de las <strong>bases de datos para grafo<\/strong>s son <strong>Neo4j, OrientDB, ArangoDB&#8230;<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n a Neo4j<\/h2>\n\n\n\n<p><strong>Neo4j<\/strong> es como uno de los mas representativos de las bases de datos orientadas a grafos, su p\u00e1gina web oficial es <a href=\"https:\/\/neo4j.com\/.\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/neo4j.com\/.<\/a> Tiene un esquema altamente flexible y escalable. Se puede almacenar gran cantidad de informaci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Principales caracter\u00edsticas<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Trabaja con <strong>nodos<\/strong> y <strong>aristas,<\/strong> lo que vendr\u00eda a ser <strong>tablas<\/strong> y <strong>relaciones<\/strong> en un <strong>modelo transaccional.<\/strong><\/li>\n\n\n\n<li>Tiene un alto <strong>rendimiento<\/strong> y <strong>escalabilidad.<\/strong><\/li>\n\n\n\n<li><strong>Esquema flexible:<\/strong> de un <strong>nodo<\/strong> a otro el <strong>esquema<\/strong> puede variar dependiendo de las necesidades.<\/li>\n\n\n\n<li>Su <strong>indexaci\u00f3n<\/strong> y la b\u00fasqueda es bastante eficiente.<\/li>\n<\/ul>\n\n\n\n<p>Generalmente se utiliza para aplicaciones y casos de uso como el <strong>an\u00e1lisis de grandes cantidades de informaci\u00f3n<\/strong>, <strong>aplicaciones de redes sociales<\/strong>, <strong>recomendaciones personalizadas,<\/strong> como cuando buscamos algo en <strong>Youtube<\/strong> y nos salen recomendaciones, o si estuvimos en un comercio electr\u00f3nico y nos aparecen tambi\u00e9n recomendaciones, <strong>detecci\u00f3n de fraudes<\/strong>, <strong>an\u00e1lisis financieros, prospecci\u00f3n de futuros, gesti\u00f3n de identidad<\/strong> y acceso, para <strong>wikis<\/strong> (<strong>bases de datos de conocimientos<\/strong>).<\/p>\n\n\n\n<p><strong>Neo4j<\/strong> tiene diferentes productos y diferentes soluciones. Vamos a utilizar una herramienta denominada <strong>Aura,<\/strong> que es la <strong>base de datos orientada a grafos<\/strong>. El lenguaje que utiliza se denomina <strong>Cypher.<\/strong> Existe una versi\u00f3n <strong>community edition<\/strong> y una <strong>versi\u00f3n empresarial<\/strong> (de pago).<\/p>\n\n\n\n<p>Para el ejercicio que vamos a realizar con <strong>Neo4j<\/strong> nos tenemos que crear una cuenta. Una vez estamos logueados veremos la <strong>consola,<\/strong> y lo que tenemos que hacer es crear una nueva <strong>instancia<\/strong> de forma gratuita.<\/p>\n\n\n\n<p>Las credenciales de nuestra instancia nos las dar\u00e1 en texto plano, y tenemos que guardar este archivo. Si perdemos este archivo con la informaci\u00f3n de la instancia y el password, no lo vamos a poder recuperar. Este archivo que debemos descargarnos nos facilita los datos de conexi\u00f3n a la <strong>base de datos<\/strong>. Le damos a continuar y comienza a crear la instancia. Una vez creada la instancia le damos al bot\u00f3n <em>OPEN<\/em> para abrirla, y aqu\u00ed es donde nos pedir\u00e1 los datos que hemos descargado del archivo, como son el password, incluimos el password y entramos en la interfaz de <strong>Neo4j.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Primeros pasos<\/h3>\n\n\n\n<p>Vamos a comenzar a trabajar en la plataforma de <strong>Neo4j.<\/strong> Para ello realizaremos un ejm. Si queremos escribir sintaxis en nuestro editor de c\u00f3digo, la extensi\u00f3n de <strong>Neo4j<\/strong> es <em>.cyp<\/em> o <em>.cypher.<\/em> Vamos a crear un caso hipot\u00e9tico de sistema para recomendar pel\u00edculas a personas, e ir viendo cuales son las pel\u00edculas que ya han visto los usuarios.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">-- Crear un nodo llamado User\nCREATE (:User {name: 'Francisco', age: 32})\n\n-- Crear un nodo llamado Movie\nCREATE (:Movie {title: 'Titulo' genre: 'Terror'})\n\n-- Crear la relaci\u00f3n entre el nodo User y el nodo Movie\n-- Relaciona Francisco con Titulo\nMATCH (u:User {name: 'Francisco'}),(m:Movie {title: 'Titulo'})\nCREATE (u)-[:HAS_SEEN]-&gt;(m)<\/pre>\n\n\n\n<p>De esta manera se puede crear un conjunto de nodos y su relaci\u00f3n entre s\u00ed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">CRUD<\/h3>\n\n\n\n<p>Vamos a incluir m\u00e1s informaci\u00f3n el ejm que estamos trabajando.<\/p>\n\n\n\n<p><strong>Ejm<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">-- Creamos 2 usuarios m\u00e1s\nCREATE (:User {name: 'Beatriz', age: 22})\nCREATE (:User {name: 'Bob', age: 32})\n\n-- Creamos 2 pel\u00edculas m\u00e1s\nCREATE (:Movie {title: 'Titulo 2', genre: 'Drama'})\nCREATE (:Movie {title: 'Titulo 3', genre: 'Comedia'}) \n\n-- Asignar dos pel\u00edculas a Beatriz\nMATCH (u:User {name: 'Beatriz'}),(m:Movie {title: 'Titulo 2'}) \nCREATE (u)-[:HAS_SEEN]-&gt;(m)\nMATCH (u:User {name: 'Beatriz'}),(m:Movie {title: 'Titulo 3'})\nCREATE (u)-[:HAS_SEEN]-&gt;(m)\n\n-- Asignar dos pel\u00edculas a Bob\nMATCH (u:User {name: 'Bob'}),(m:Movie {title: 'Titulo 2'}) \nCREATE (u)-[:HAS_SEEN]-&gt;(m)\nMATCH (u:User {name: 'Bob'}),(m:Movie {title: 'Titulo 3'})\nCREATE (u)-[:HAS_SEEN]-&gt;(m)\n\n-- El CREATE es como si fuera la creaci\u00f3n\n-- El MATCH es como si fuera el SELECT\nCREATE (:User {name: 'Eva', age: 10})\nMATCH (u:User {name: 'Eva'})\nRETURN u\n\n-- En u guardas el usuario con el nombre Eva y le cambias la edad\nMATCH (u:User {name: 'Eva'})\nSET u.age = 15\n\n-- En u guardamos el nombre Eva para posteriormente borrarlo\nMATCH (u:User {name: 'Eva'{)\nDELETE u\n\n-- Creamos la pel\u00edcula Titulo 4, seleccionamos dicha pel\u00edcula y la imprimimos en pantalla\nCREATE (:Movie {title: 'Titulo 4', genre: 'Horror'})\nMATCH (m:Movie {title: 'Titulo 4})\nRETURN m<\/pre>\n\n\n\n<p>Este es un ejm sencillo de como funcionan las bases <strong>orientadas<\/strong> <strong>a<\/strong> <strong>grafos.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estas BDs est\u00e1n creadas para dise\u00f1ar y analizar datos en forma de grafos. En grafos los datos se presentan como [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":1165,"menu_order":5,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-1179","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"Estas BDs est\u00e1n creadas para dise\u00f1ar y analizar datos en forma de grafos. En grafos los datos se presentan como [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1179"}],"version-history":[{"count":1,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1179\/revisions"}],"predecessor-version":[{"id":1180,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1179\/revisions\/1180"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1165"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}