Introducción a la base de datos de grafos Neo4j

Introducción a la base de datos de grafos Neo4j

  • Orquestación
6 min de lectura Actualizado Mar 21, 2019

Puntos clave: Neo4j está una base de datos líder en grafos que organiza los datos como nodos, aristas y propiedades, lo que la hace ideal para el análisis de big data. Incluye una Edición Comunitaria gratuita y una versión de prueba para la versión Enterprise, que permite a los usuarios gestionar relaciones complejas usando el lenguaje de consultas Cypher.

  • Las bases de datos de grafos como Neo4j destacan en ilustrar relaciones, como las conexiones sociales.
  • Sus robustas capacidades y soporte para algoritmos de grafos contribuyen a su popularidad.

Neo4j están una base de datos de grafos. Una base de datos de grafos, en lugar de tener filas y columnas, tiene aristas y propiedades de nodos. Está más adecuada para ciertas aplicaciones de big data y análisis que bases de datos de filas y columnas o bases de datos de documentos JSON de formato libre para muchos casos de utiliza.

Se están utiliza una base de datos de grafos para representar relaciones. El ejemplo más común de esto están la relación de Amigo de Facebook así como la relación de Me gusta. te puede Ve parte de eso en el gráfico de abajo de Neo4j.

Los círculos son nodos. Las líneas, llamadas aristas, indican relaciones. Y cualquier comentario dentro de los círculos son propiedades de ese nodo.

fuente gráfica: Neo4j

Escribimos sobre Neo4j aquí porque tiene la mayor cuota de mercado. Son otros actores en este mercado. Y según Neo4J, Apache Spark 3.0 añadirá el Lenguaje de Consultas Cifrado Neo4j para permitir y Haz más sencillos "grafos de propiedades basados en DataFrames para Spark." Spark ya soporta GraphX, que es una extensión del RDD para soportar Grafos. Hablaremos de eso en otra entrada del blog.

En otra publicación también hablaremos de algoritmos de grafos. El más famoso de ellos es el Google Page Rank Index. Los algoritmos son la forma de navegar por los nodos y aristas.

¿Costes?

¿Están Neo4J gratuito? Eso es bastante complicado. La Edición Comunitaria sí. Así que está la versión de escritorio, adecuada para aprender? La edición Enterprise no lo está. Eso es coherente con otros productos de código abierto. Cuando pedí a Neo4J una licencia para trabajar con su producto durante un periodo prolongado, me recomendaron utilizar la versión de escritorio. La versión Enterprise tiene un periodo de prueba de 30 días.

Hay son otras alternativas en el mercado.  La clave sería elegir una que tenga suficientes usuarios para que no quiebren.  ¿Cuál deberías te utiliza?  te tendrás que investigar para averiguarlo.

Instala Neo4J

te puede utiliza la versión de escritorio o tar. Aquí estoy usando la versión tar, en Mac. Solo tienes que descargarla y luego Comienza la shell como se muestra abajo. te necesitarás un JDK en Java, entonces.

    export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home'

Comienza el servidor y establece la contraseña inicial y luego abre cypher-shell. La URL predeterminada están un bolt://localhost:7687 bastante extraño.

    cd neo4j bin folder

neo4j-admin set-initial-password xxxxxx

./cypher-shell   -a bolt://localhost:7687  -u neo4j  -p xxxxx

Crea un único nodo

Algo de un nodo como un círculo u objeto, en la imagen de arriba. Opcionalmente puede tener propiedades o una etiqueta o ambas.

A continuación están la forma más sencilla de Crea un nodo. (Ten en cuenta que te debe terminar cada comando cifrado de comando con un punto y coma.) Este nodo no tiene nada asociado, es decir, no tiene propiedades ni etiquetas. Solo tiene una variable, n, que te puede utiliza en otras operaciones. Lo que todo esto significa se aclarará en los pasos siguientes.

    create (n);  
     
0 rows available after 13 ms, consumed after another 0 ms
Added 1 nodes

Cyper SQL están lo que Neo4j llama su lenguaje de comandos. Cuando te ejecuta un comando, no devuelve ningún valor a menos que te añadir la palabra clave return. En este ejemplo, como antes, Crea un nodo sin nada. Neo4j crea una variable, que hemos llamado x, para representar ese objeto y que luego podemos devolver usando la sentencia return, para que podamos Ve o utiliza en operaciones posteriores.

    create(x) return x ;

+----+
| x  |
+----+
| () |
+----+

Crea múltiples nodos

te pueden Crea más de un nodo a la vez:

    create (o),(p);
0 rows available after 13 ms, consumed after another 0 ms
Added 2 nodes

Crea un nodo con una etiqueta

Una etiqueta están como el nombre del nodo, o piensa en ello como un tipo. Debajo están nodo con la etiqueta Estudiante. Las etiquetas tienen dos puntos (:) delante. Como antes, s están simplemente una variable. Es el ámbito están la vida útil de la casca. Cierra la casca y la variable desaparece.

    create (s:Student);
0 rows available after 16 ms, consumed after another 0 ms
Added 1 nodes, Added 1 labels

te puede Crea nodos con más de una etiqueta:

    create (s:Student:Biology) return s;

Además de una etiqueta, un nodo puede tener propiedades, dadas como JSON:

    CREATE (x:Employees { name: 'Walker', title: 'Tech Writer' }) 
CREATE (y:Employees { name: 'Stephen', title: 'Manager' }) 
return x,y;

Crea una relación

La sintaxis para crear una relación están de aspecto extraño. A continuación, esta relación de ejemplo están llama BOSS. La r delante están solo una variable. Y la flecha muestra la dirección. te puede utiliza ->, <-, o - para indicar la dirección. Como están complicado recordar la dirección, te quizá quieras utiliza el - (guion), es decir, ambas direcciones, en modelos realmente complejos si la dirección no importa. Es una decisión diseña.

A continuación están cómo Crea una relación. Decimos en este ejemplo que Stephen están el JEFE de Walker. La instrucción MATCH está como la selección SQL. Da los criterios de selección que muestran qué dos elementos deben estar conectados entre sí.

Y aquí utiliza x e y como variables temporales. Como te puede Ve permiten te utiliza notación abreviada en sentencias posteriores, usando el nombre de la variable en lugar de :label.

    MATCH (x:Employees),(y:Employees)
WHERE y.name = "Stephen" AND x.name = "Walker"
CREATE (x)-[r:BOSS]->(y)
RETURN type(r);

Ahora, llevamos la lógica en la dirección opuesta. Si Stephen es el jefe de Walker, entonces Walker trabaja para Stephen. Así que podemos Haz a Walker EMPLEADO de Stephen. Podemos utilizar cualquier nombre descriptivo, como EMPLEADO.

    MATCH (x:Employees),(y:Employees)
WHERE y.name = "Stephen" AND x.name = "Walker"
CREATE (y)-[r:EMPLOYEEOF]->(x)
RETURN type(r);

Crea múltiples relaciones

Aquí damos otro ejemplo: aquí tenemos un modelo de drogas, para qué son usadas y quién las fabrica.

Crea algunos datos y luego Crea las relaciones. Presta atención a la salida como si te Haz un error y la instrucción MATCH no encontrara datos, entonces la relación tampoco tendrá datos. En otras palabras, debería decir Crea n nodos o Created n relationships, donde n > 0.

    CREATE (x:Cancers { name: 'skin'});
CREATE (x:Drugs { name: 'interferon'});
CREATE (x:Pharmacy { name:  'Acme Drugs'}); 

MATCH (a:Cancers),(b:Drugs)
WHERE a.name = 'skin' AND b.name = 'interferon'
CREATE (a)-[rp:PROTOCOL]->(b), (b)-[rt:TREATS]->(a);

MATCH (a:Pharmacy),(b:Drugs)
WHERE a.name = 'Acme Drugs' AND b.name = 'interferon'
CREATE (a)-[r:MAKES]->(b);

Aquí Haz relaciones en ambas direcciones, haciendo dos relaciones a la vez. Fíjate que la b y la a intercambian posiciones para mostrar cuál pertenece a quién. También podríamos haber apuntado la flecha en la dirección opuesta.

    MATCH (a:Cancers),(b:Drugs)
       WHERE a.name = 'skin' AND b.name = 'interferon'
       CREATE (a)-[rp:PROTOCOL]->(b), (b)-[rt:TREATS]->(a);

Consultas

Aquí ilustramos más a fondo cómo funciona MATCH. Primero listamos todos los nodos con la etiqueta Pharmacy.

    MATCH (p:Pharmacy) return p;
+----------------------------------+
| p                                |
+----------------------------------+
| (:Pharmacy {name: "Acme Drugs"}) |
+----------------------------------+

Ahora mostramos todas las relaciones de las farmacias que Haz medicamentos.

    MATCH (p:Pharmacy)-[r:MAKES]->(b:Drugs) return p,b;
+------------------------------------------------------------------+
| p                                | b                             |
+------------------------------------------------------------------+
| (:Pharmacy {name: "Acme Drugs"}) | (:Drugs {name: "interferon"}) |
+------------------------------------------------------------------+

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.