Últimas entradas

Neo4j base de datos orientada a grafos

Neo4j es una base de datos orientada a grafos escrita en Java, es decir la información se almacena de forma relacionada formando un grafo dirigido entre los nodos y las relaciones entre ellos, se integra con múltiples lenguajes como Java, PHP, Ruby, .Net, Python, Node, Scala, etc.

En el siguiente post habíamos hablado acerca de algunos tipos de base de orientados a grafos https://usuarioperu.com/2018/02/05/tipos-de-bases-de-datos-nosql/

Aunque hay varios tipos de grafos, Neo4j sigue el modelo property graph o grafo de propiedades en los que tenemos los datos en formato clave/valor, almacenando datos en los nodos y relaciones direccionales.

Las bases de datos NoSQL orientadas a grafos utilizan la topología de un grafo con nodos como vértices y relaciones como aristas y propiedades, utilizada para almacenar y representar datos conectados sin necesidad de utilizar un índice (que es el método tradicional de simular una relación en una base de datos relacional), de esta forma, los vecinos de un nodo son accesibles directamente mediante una referencia directa, sin pasar por estructuras intermedias. Nuestros datos pueden seguir distintos tipos de grafo, tener distinto tipo de relaciones, distinta multiplicidad de relaciones entre nodos (unirelacional o multirelacional) y distinta aridad de relaciones (grafo o hipergrafo).

Una base de datos orientada a grafos (BDG) es una base de datos que tiene como propósito almacenar estructuras de datos que tienen topología de grafo, es decir, que la información que se almacena se puede representar por medio de nodos y aristas entre ellos.

Por tanto, una BDG debe cumplir los siguientes criterios:

  • El almacenamiento está optimizado para representar datos como un grafo, proporcionando los nodos y las aristas que lo forman.
  • El almacenamiento está optimizado para realizar los traversals a través del grafo, sin uso de índices que “representen” las aristas. Por ello, una BDG está optimizada para realizar consultas en los datos en las que intervengan relaciones de proximidad (conexiones) entre datos, y no para la realización de consultas globales.
  • El modelo de datos es flexible, lo que en algunas ocasiones nos permite no declarar tipos de nodos o de aristas (el tipo de nodo o arista sería equivalente a las distintas tablas que se definen en un modelo relacional).
  • Integra funciones para aplicar los algoritmos clásicos de la Teoría de Grafos.

Los casos de usos recomendados para utilizar una BDG son:

  • Búsquedas en base a grafos
  • Sistemas de recomendación
  • Redes sociales
  • Gestión de identidades y accesos
  • Detección de fraude
  • Gestión de datos maestros

Existen formas de utilizar Neo4j:

  • Con Cypher como lenguaje declarativo de consulta.
  • API REST con algo más de funcionalidad que Cypher (aunque esta tendencia va disminuyendo en las últimas versiones).
  • En casos especiales podemos utilizar plugins vía API

Veamos unos ejemplos usando Cypher en https://console.neo4j.org/

Tomamos como referencia los siguientes ejemplos:

Como Crear un nodo


CREATE (n)

Creación múltiples nodos


CREATE (n), (m)

Creación un nodo con un label


CREATE (n:Person)

Como crear un nodo con múltiples labels


CREATE (n:Person:Swedish)

Creación de un nodo y labels y propiedades


CREATE (n:Person {name: 'Andy', title: 'Developer'})

Retorno de la creación de un nodo


CREATE (a {name: 'Andy'})
RETURN a.name

Crear una relación entre dos nodos


MATCH
  (a:Person),
  (b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE]->(b)
RETURN type(r)

Crear una relación y establecer propiedades


MATCH
  (a:Person),
  (b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE {name: a.name + '<->' + b.name}]->(b)
RETURN type(r), r.name

Crea ruta completa


CREATE p = (andy {name:'Andy'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael {name: 'Michael'})
RETURN p

Fuente:

https://neo4j.com/

https://neo4j.com/docs/cypher-manual/current/syntax/

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *