SlideShare una empresa de Scribd logo
NEO4J
Javier de la Rosa FernándezUniversidad Europea de Madrid | Sistemas distribuidos
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.
INTRODUCCIÓN – MODELO BASADO EN GRAFOS
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.
NEO4J – UN POCO DE HISTORIA
Neo4j nace de la mano de NeoTechnology 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, …
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.
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
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.
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?
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?
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.
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.
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.
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
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)
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.
CYPHER - IMPLEMENTACIÓN
MATCH (you:Person {name:"You"}) FOREACH (namein
["Johan","Rajesh","Anna","Julia","Andrew"] | CREATE (you)-[:FRIEND]-
>(:Person {name:name}))
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
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 ‘=~’
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 ‘=~’
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
VENTAJASY 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?
BIBLIOGRAFÍA
 http://neo4j.com/developer/get-started/
 http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=neo4j_first_st
eps
 http://en.wikipedia.org/wiki/Graph_database

Más contenido relacionado

La actualidad más candente

Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
Miguel Angel Rivera Robledo
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
TAtiizz Villalobos
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
Daniel Gomez Jaramillo
 
Nucleo del sistema operativo
Nucleo del sistema operativoNucleo del sistema operativo
Nucleo del sistema operativo
Emily_Fdez
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
NANO-06
 
ESTRUCTURA DE DATOS Pilas y colas.pdf
ESTRUCTURA DE DATOS Pilas y colas.pdfESTRUCTURA DE DATOS Pilas y colas.pdf
ESTRUCTURA DE DATOS Pilas y colas.pdf
KEVINDAVIDTOPONSALAZ
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
Carlos Alberto Cuervo Cardenas
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
Lalo Chooper
 
Colas
ColasColas
Arreglos - Assembler
Arreglos - AssemblerArreglos - Assembler
Arreglos - Assembler
Jorge Paredes Toledo
 
22 ejercicios base de datos
22 ejercicios base de datos 22 ejercicios base de datos
22 ejercicios base de datos
Hector Velazquez Alfonso de Castillo
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
arrietaevelio
 
Metodo burbuja
Metodo burbujaMetodo burbuja
Metodo burbuja
Pablo Andres M
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
Anel Sosa
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbench
Jair Ospino Ardila
 
Tad lista, pilas y colas
Tad lista, pilas y colasTad lista, pilas y colas
Tad lista, pilas y colas
labarra90
 
Introducción a Neo4j
Introducción a Neo4jIntroducción a Neo4j
Introducción a Neo4j
Neo4j
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datos
Jorge Garcia
 
Proyecto Final Base De Datos
Proyecto Final Base De DatosProyecto Final Base De Datos
Proyecto Final Base De Datos
guestcde16b
 

La actualidad más candente (20)

Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
Programación MySQL-Ejercicios
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
 
Nucleo del sistema operativo
Nucleo del sistema operativoNucleo del sistema operativo
Nucleo del sistema operativo
 
Listas como estructura de datos..
Listas como estructura de datos..Listas como estructura de datos..
Listas como estructura de datos..
 
ESTRUCTURA DE DATOS Pilas y colas.pdf
ESTRUCTURA DE DATOS Pilas y colas.pdfESTRUCTURA DE DATOS Pilas y colas.pdf
ESTRUCTURA DE DATOS Pilas y colas.pdf
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 
Metodos de ordenamiento
Metodos de ordenamientoMetodos de ordenamiento
Metodos de ordenamiento
 
Colas
ColasColas
Colas
 
Arreglos - Assembler
Arreglos - AssemblerArreglos - Assembler
Arreglos - Assembler
 
22 ejercicios base de datos
22 ejercicios base de datos 22 ejercicios base de datos
22 ejercicios base de datos
 
Pilas y colas
Pilas y colasPilas y colas
Pilas y colas
 
Metodo burbuja
Metodo burbujaMetodo burbuja
Metodo burbuja
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
Creación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbenchCreación de tablas y relaciones en mysql workbench
Creación de tablas y relaciones en mysql workbench
 
Tad lista, pilas y colas
Tad lista, pilas y colasTad lista, pilas y colas
Tad lista, pilas y colas
 
Introducción a Neo4j
Introducción a Neo4jIntroducción a Neo4j
Introducción a Neo4j
 
Diccionario de datos
Diccionario de datosDiccionario de datos
Diccionario de datos
 
Proyecto Final Base De Datos
Proyecto Final Base De DatosProyecto Final Base De Datos
Proyecto Final Base De Datos
 

Destacado

Tutorial neo4j en español
Tutorial neo4j en españolTutorial neo4j en español
Tutorial neo4j en español
Banco Central de Reserva
 
DynamoDB, análisis del paper.
DynamoDB, análisis del paper.DynamoDB, análisis del paper.
DynamoDB, análisis del paper.
Javier de la Rosa Fernandez
 
Experiencias con Neo4j en InfoJobs
Experiencias con Neo4j en InfoJobsExperiencias con Neo4j en InfoJobs
Experiencias con Neo4j en InfoJobs
Marc Pou i Miquel
 
Scala desde c# y JavaScript
Scala desde c# y JavaScriptScala desde c# y JavaScript
Scala desde c# y JavaScript
Roberto Luis Bisbé
 
Scala: un vistazo general
Scala: un vistazo generalScala: un vistazo general
Scala: un vistazo general
Miguel Pastor
 
Graph database & neo4j
Graph database & neo4jGraph database & neo4j
Graph database & neo4j
Sandip Jadhav
 
Manual de como instalar mongo db en windows
Manual de  como instalar mongo db en windowsManual de  como instalar mongo db en windows
Manual de como instalar mongo db en windows
Marco Antonio Tuz Castillo
 
Baño
BañoBaño
Evitando el fraude a través de la presentación de la información en grafos
Evitando el fraude a través de la presentación de la información en grafosEvitando el fraude a través de la presentación de la información en grafos
Evitando el fraude a través de la presentación de la información en grafos
Universidad de Deusto - Deustuko Unibertsitatea - University of Deusto
 
Introducción a Apache Spark a través de un caso de uso cotidiano
Introducción a Apache Spark a través de un caso de uso cotidianoIntroducción a Apache Spark a través de un caso de uso cotidiano
Introducción a Apache Spark a través de un caso de uso cotidiano
Socialmetrix
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
Karol
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
David Vallejo Navarro
 
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Universidad de Deusto - Deustuko Unibertsitatea - University of Deusto
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Diego López-de-Ipiña González-de-Artaza
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4j
Ubaldo Taladriz
 

Destacado (15)

Tutorial neo4j en español
Tutorial neo4j en españolTutorial neo4j en español
Tutorial neo4j en español
 
DynamoDB, análisis del paper.
DynamoDB, análisis del paper.DynamoDB, análisis del paper.
DynamoDB, análisis del paper.
 
Experiencias con Neo4j en InfoJobs
Experiencias con Neo4j en InfoJobsExperiencias con Neo4j en InfoJobs
Experiencias con Neo4j en InfoJobs
 
Scala desde c# y JavaScript
Scala desde c# y JavaScriptScala desde c# y JavaScript
Scala desde c# y JavaScript
 
Scala: un vistazo general
Scala: un vistazo generalScala: un vistazo general
Scala: un vistazo general
 
Graph database & neo4j
Graph database & neo4jGraph database & neo4j
Graph database & neo4j
 
Manual de como instalar mongo db en windows
Manual de  como instalar mongo db en windowsManual de  como instalar mongo db en windows
Manual de como instalar mongo db en windows
 
Baño
BañoBaño
Baño
 
Evitando el fraude a través de la presentación de la información en grafos
Evitando el fraude a través de la presentación de la información en grafosEvitando el fraude a través de la presentación de la información en grafos
Evitando el fraude a través de la presentación de la información en grafos
 
Introducción a Apache Spark a través de un caso de uso cotidiano
Introducción a Apache Spark a través de un caso de uso cotidianoIntroducción a Apache Spark a través de un caso de uso cotidiano
Introducción a Apache Spark a través de un caso de uso cotidiano
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
Casos de puesta en valor de de la tecnología de Big Data con NoSQL orientada ...
 
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4jBases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
Bases de Datos No Relacionales (NoSQL): Cassandra, CouchDB, MongoDB y Neo4j
 
Primeros pasos con neo4j
Primeros pasos con neo4jPrimeros pasos con neo4j
Primeros pasos con neo4j
 

Similar a Neo4j - A Graph Database

Java
JavaJava
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
javier ramirez
 
Intro a ANNs c/Keras
Intro a ANNs c/KerasIntro a ANNs c/Keras
Intro a ANNs c/Keras
Rodolfo Ferro
 
Taller completo
Taller completoTaller completo
Taller completo
JuancHo95050110169
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
Johanna Mendez
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
Johanna Mendez
 
Capacitacion neo4j
Capacitacion neo4jCapacitacion neo4j
Capacitacion neo4j
JoelRojasValencia
 
Diseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales JavaDiseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales Java
dcerezo
 
Java
JavaJava
Update Big Data 2014
Update Big Data 2014Update Big Data 2014
Update Big Data 2014
Stratebi
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
Socialmetrix
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPT
Alejito Laaz
 
Formacinapachesolr tv3-150130071830-conversion-gate02
Formacinapachesolr tv3-150130071830-conversion-gate02Formacinapachesolr tv3-150130071830-conversion-gate02
Formacinapachesolr tv3-150130071830-conversion-gate02
Antonio Meléndez
 
Formación apache Solr
Formación apache SolrFormación apache Solr
Formación apache Solr
Juanjo Hernández
 
Artículo - Simulador NS (Network Simulator)
Artículo - Simulador NS (Network Simulator)Artículo - Simulador NS (Network Simulator)
Artículo - Simulador NS (Network Simulator)
Andrés Felipe Montoya Ríos
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
Alfonso Alba
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
Giuseppe Maxia
 
Java 1.8:Road to Functional Language
Java 1.8:Road to Functional LanguageJava 1.8:Road to Functional Language
Java 1.8:Road to Functional Language
Cristian Romero Matesanz
 
Java
Java Java
Desarrollo con stack MEAN
Desarrollo con stack MEANDesarrollo con stack MEAN
Desarrollo con stack MEAN
SlashMobility.com
 

Similar a Neo4j - A Graph Database (20)

Java
JavaJava
Java
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Intro a ANNs c/Keras
Intro a ANNs c/KerasIntro a ANNs c/Keras
Intro a ANNs c/Keras
 
Taller completo
Taller completoTaller completo
Taller completo
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Replicacion con postgresql y slony
Replicacion con  postgresql y slonyReplicacion con  postgresql y slony
Replicacion con postgresql y slony
 
Capacitacion neo4j
Capacitacion neo4jCapacitacion neo4j
Capacitacion neo4j
 
Diseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales JavaDiseño formal de máquinas virtuales Java
Diseño formal de máquinas virtuales Java
 
Java
JavaJava
Java
 
Update Big Data 2014
Update Big Data 2014Update Big Data 2014
Update Big Data 2014
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
RESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPTRESUMEN DE JAVASCRIPT
RESUMEN DE JAVASCRIPT
 
Formacinapachesolr tv3-150130071830-conversion-gate02
Formacinapachesolr tv3-150130071830-conversion-gate02Formacinapachesolr tv3-150130071830-conversion-gate02
Formacinapachesolr tv3-150130071830-conversion-gate02
 
Formación apache Solr
Formación apache SolrFormación apache Solr
Formación apache Solr
 
Artículo - Simulador NS (Network Simulator)
Artículo - Simulador NS (Network Simulator)Artículo - Simulador NS (Network Simulator)
Artículo - Simulador NS (Network Simulator)
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Java 1.8:Road to Functional Language
Java 1.8:Road to Functional LanguageJava 1.8:Road to Functional Language
Java 1.8:Road to Functional Language
 
Java
Java Java
Java
 
Desarrollo con stack MEAN
Desarrollo con stack MEANDesarrollo con stack MEAN
Desarrollo con stack MEAN
 

Neo4j - A Graph Database

  • 1. NEO4J Javier de la Rosa FernándezUniversidad Europea de Madrid | Sistemas distribuidos
  • 2. 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.
  • 3. INTRODUCCIÓN – MODELO BASADO EN GRAFOS
  • 4. 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.
  • 5. NEO4J – UN POCO DE HISTORIA Neo4j nace de la mano de NeoTechnology 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, …
  • 6. 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.
  • 7. 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
  • 8. 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.
  • 9. 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?
  • 10. 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?
  • 11. 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.
  • 12. 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.
  • 13. 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.
  • 14. 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
  • 15. 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)
  • 16. 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.
  • 17. CYPHER - IMPLEMENTACIÓN MATCH (you:Person {name:"You"}) FOREACH (namein ["Johan","Rajesh","Anna","Julia","Andrew"] | CREATE (you)-[:FRIEND]- >(:Person {name:name}))
  • 18. 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
  • 19. 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 ‘=~’
  • 20. 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 ‘=~’
  • 21. 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
  • 22. VENTAJASY 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?