Neo4j - A Graph Database

23
NEO4J Javier de la Rosa Fernández Universidad Europea de Madrid | Sistemas distribuidos

Transcript of Neo4j - A Graph Database

Page 1: Neo4j - A Graph Database

NEO4JJavier de la Rosa FernándezUniversidad Europea de Madrid | Sistemas distribuidos

Page 2: Neo4j - A Graph Database

INTRODUCCIÓN – MODELO BASADO EN GRAFOS

Un modelo basado en grafos se compone de: Nodos: Pueden contener cualquier número de

atributos que están formados por conjuntos de pares Clave-Valor.

Etiquetas: Roles y metadatos. Relaciones: Proporcionan conexiones dirigidas entre

dos nodos y están formada por: Nodo origen Nodo destino Tipo

Las relaciones pueden incluir propiedades: pesos, costes, intervalos de tiempo, etc.

Page 3: Neo4j - A Graph Database

INTRODUCCIÓN – MODELO BASADO EN GRAFOS

Page 4: Neo4j - A Graph Database

INTRODUCCIÓN – MODELO BASADO EN GRAFOS

Una regla de oro en los modelos de grafos es que:

“No existen conexiones rotas”

No se puede eliminar un nodo sin eliminar también toda sus conexiones, lo que significa que es imposible tener que una conexión apunte a algo inexistente.

Page 5: Neo4j - A Graph Database

NEO4J – UN POCO DE HISTORIA

Neo4j nace de la mano de Neo Technology como una base de datos orientada a grafos de código abierto implementada en Java y Scala.

El desarrollo se inició en 2003 y se puso a disposición del público en el año 2007. Además su código está disponible en gitHub permitiendo a usuarios y entidades colaborar con ellos.

Neo4j es usado por cientos de miles de compañía en una gran variedad de industrias: ebay, wallmart, telenor, …

Page 6: Neo4j - A Graph Database

NEO4J – MODELO ORIENTADO A GRAFOS

Neo4j implementa un modelo orientado a grafos de manera eficiente a nivel de almacenamiento. Neo4j ofrece gran cantidad de características de las bases de datos incluyendo el cumplimiento de transacción ACID.

Page 7: Neo4j - A Graph Database

NEO4J – ALTA DISPONIBILIDAD (NEO4J HA)

Cuando se ejecuta en modo de Neo4j HA siempre hay un solo maestro y cero o más esclavos. En comparación con otras configuraciones de replicación maestro-esclavo Neo4j HA puede manejar las solicitudes de escritura en todas las máquinas para que no haya necesidad de redirigirlas al maestro.

Un esclavo se encargará de las escrituras sincronizándose con el maestro para mantener la consistencia. Las escrituras en el maestro se puede configurar para ser optimistas replicándose a 0 o más esclavos.Todas las actualizaciones se propagan desde el maestro a otros esclavos finalmente por lo que una escritura de un esclavo puede no estar visible en todos los otros esclavos de manera inmediata.

EVENTUALMENTE CONSISTENTE => NO CUMPLE CON LA ‘C’ DE ACID

Page 8: Neo4j - A Graph Database

NEO4J – ALTA DISPONIBILIDAD (NEO4J HA)

Al iniciarse una instancia de base de datos Neo4j HA, intentará conectarse a un clúster existente especificado por la configuración. Si existe el clúster, la instancia se unirá a él como un esclavo. De lo contrario, el clúster se creará y la instancia se convertirá en su maestro.

Para garantizar la coherencia, un esclavo tiene que estar al corriente (sincronizado) con el maestro antes de realizar una operación de escritura. Esto está integrado en el protocolo de comunicación entre el esclavo y el maestro, por lo que las actualizaciones implican a un esclavo comunicarse con su maestro automáticamente.

En caso de éxito en la escritura, está será replicada en un número configurable de esclavos. Es optimista, aunque la replica falle, la transacción se acabará realizando.

Page 9: Neo4j - A Graph Database

NEO4J – ALTA DISPONIBILIDAD (NEO4J HA)

Si se produce un fallo al intentar acceder a una instancia (como por ejemplo un fallo en el hardware), las otras instancias lo detectan y lo marcan como temporalmente fallida.

Cuando esta instancia está disponible de nuevo, el clúster la captura de forma automática.

¿Y si se cae una instancia?

Page 10: Neo4j - A Graph Database

NEO4J – ALTA DISPONIBILIDAD (NEO4J HA)

Si el maestro se cae otro miembro (el más adecuado) será elegido y cambiarán su papel de esclavo a maestro después de que se haya alcanzado el quórum en el clúster. Tras el nuevo maestro tomar este rol, notificará al resto de esclavos de su existencia como maestro.

Durante este tiempo (unos segundos), las escrituras se bloquean.

Cuando el viejo maestro sea relanzado, este cargará una copia del nuevo maestro.

¿Y si es el maestro quien se cae?

Page 11: Neo4j - A Graph Database

NEO4J – CARACTERÍSTICAS PRINCIPALES

Las escrituras se pueden realizar en cualquier instancia del clúster.

Neo4j es tolerante a fallos para cualquier número de máquinas y para la caída de cualquiera de las máquinas.

Los esclavos se sincronizarán automáticamente con el maestro en las operaciones de escrituras.

Si el master cae, un nuevo master será elegido automáticamente.

El clúster automáticamente maneja la incorporación de nuevas instancias.

Las transacciones son atómicas, consistentes (o eventualmente) y duraderas.

El factor de replicación es configurable.

Si el maestro se cae cualquier nueva transacción de escritura se bloqueará hasta que un nuevo maestro sea elegido.

Page 12: Neo4j - A Graph Database

NEO4J – CARACTERÍSTICAS PRINCIPALES

Neo4J puede almacenar cualquier tipo de información usando los siguientes conceptos:

Nodos: Almacena los registros del grafo.

Relaciones: Conecta los distintos nodos.

Propiedades: Datos con nombre.

Page 13: Neo4j - A Graph Database

CYPHER - INTRODUCCIÓN

Cypher es el lenguaje de consulta que proporciona una buena manera de realizar queries y otras acciones en Neo4j. Aunque Cypher está orientado para el uso en trabajos de exploración, es lo suficientemente rápido para poder usarse en producción.

Se pueden usar aproximaciones en java para manejar aquellos casos en los que Cypher pueda no resultar lo suficientemente eficiente.

Page 14: Neo4j - A Graph Database

CYPHER - INSTALACIÓN

“Plug AND Play”

Únicamente consiste en descargar el fichero comprimido de la web oficial y ejecutar /bin/neo4j start.

Tras esto se inicia el servidor y podemos ejecutar su versión web mediante en el puerto 7474:

http://localhost:7474

Page 15: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

Función CREATE

La sentencia para la creación de datos es CREATE. Con esta sentencia podemos crear nodos y estructuras más complejas.

CREATE (:NombreNodo{ NombrePropiedad:"valorPropiedad",NombrePropiedad2:valorPropiedadNum })

CREATE (a:NodoA{ NombrePropiedad:"valorPropiedad",...})-[r:ACTED_IN { roles: ["Forrest"]}]->(b:NodoB{ NombrePropiedad:"valorPropiedad",... })

RETURN a,b

CREATE (c:NodoC { NombrePropiedad:"valorPropiedad",... })-[:NOMBREETIQUETA]->(b)

Page 16: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

CREATE (you:Person {name:"You"}) RETURN you

MATCH (you:Person {name:"You"}) CREATE (you)-[like:LIKE]->(neo:Database:NoSql:Graph {name:"Neo4j" }) RETURN you,like,neo

Es necesario el match, si no se pone y el nodo no existe, neo4j creará el nodo apuntando a un nodo vacío.Con la función Match, si no existe el nodo, no se crea ni el nodo ni la relación.

Page 17: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

MATCH (you:Person {name:"You"}) FOREACH (namein ["Johan","Rajesh","Anna","Julia","Andrew"] | CREATE (you)-[:FRIEND]->(:Person {name:name}))

Page 18: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

Función MATCH

La función MATCH se utiliza para realizar búsquedas que coincidan con un patrón debe de ser introducido.

MATCH (variable:NombreNodo) RETURN variable

MATCH (variable:NombreNodo { nombreCampo:"ValorCampo" }) RETURN variable

MATCH (a:NodoA{nombreCampo:"ValorCampo" })-[r:ETIQUETA]->(b:NodoB) RETURN a.nombreCampo2, r.roles

Page 19: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

Función MATCH

Además Cypher es muy parecido a SQL y tiene palabras reservadas propias de SQL como pueden ser: WHERE, COUNT, GROUP BY, ORDER BY, etc.MATCH (actor:Person)-[:ACTED_IN]->(movie:Movie)

WHERE movie.title =~ "T.*"

RETURN movie.title as title, collect(actor.name) as cast

ORDER BY title ASC LIMIT 10;

En Cypher no existe la palabra LIKE , sino que queda sustituida por la expresión ‘=~’

Page 20: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

Función MATCH

Cypher realiza automáticamente las agrupaciones (Group by) al realizar una operación de agregación.

MATCH (:Order)<-[:SOLD]-(e:Employee)

RETURN e.name, count(*) as cnt

ORDER BY cnt DESC LIMIT 10

En Cypher no existe la palabra LIKE , sino que queda sustituida por la expresión ‘=~’

Page 21: Neo4j - A Graph Database

CYPHER - IMPLEMENTACIÓN

Función DELETE

La función DELETE es similar a la función sql, y con el MATCH podemos hacer de filtro para saber que queremos eliminar.

MATCH (n { name: 'Andres' })-[r]-() DELETE n, r

Page 22: Neo4j - A Graph Database

VENTAJAS Y DESVENTAJAS

Ventajas:

Lenguaje sencillo

Muy visual

Buena para redes sociales

Desventajas:

¿Problema con muchos datos?

¿Díficil de mantener por la necesidad de crear múltiples nodos?

Page 23: Neo4j - A Graph Database

BIBLIOGRAFÍA

http://neo4j.com/developer/get-started/

http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=neo4j_first_steps

http://en.wikipedia.org/wiki/Graph_database