documento neo4j (4)

18
COMPARATIVO BASE DE DATOS RELACIONALES Y BASE DE DATOS ORIENTADA A GRAFOS EDGAR DUVAN LEAL ROPERO WILMER ANDRES MANTILLA SUAREZ UNIVERSIDAD DE PAMPLONA FACULTAD DE INGENIERIAS Y ARQUITECTURAS INGENERIA DE SISTEMAS PAMPLONA, NORTE DE SANTANDER SEPTIEMBRE 22 2014

Upload: wilmer-andres-mantilla-suarez

Post on 18-Jan-2016

106 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Documento NEO4J (4)

COMPARATIVO BASE DE DATOS RELACIONALES Y BASE DE DATOS ORIENTADA A

GRAFOS

EDGAR DUVAN LEAL ROPERO WILMER ANDRES MANTILLA SUAREZ

UNIVERSIDAD DE PAMPLONA FACULTAD DE INGENIERIAS Y ARQUITECTURAS

INGENERIA DE SISTEMAS PAMPLONA, NORTE DE SANTANDER

SEPTIEMBRE 22 2014

Page 2: Documento NEO4J (4)

TABLA DE CONTENIDO

1. INTRODUCCION ................................................................................................................... 4

4

2. MARCO TEORICO................................................................................................................ 5

3. BASE DE DATOS RELACIONAL RDBM ........................................................................... 6

3.1 Construcción de un modelo relacional .......................................................................... 6

3.2 CREACION UNA BASE DE DATOS MODELO RELACIONAL .................................... 7

4. LENGUAJE RELACIONAL SQL ......................................................................................... 8

Crear un esquema RDBM ......................................................................................................... 8

Crear un tabla RDBM ................................................................................................................ 8

Insersion de datos RDBM ......................................................................................................... 8

Actualizar RDBM ....................................................................................................................... 8

Restricciones RDBM ................................................................................................................. 9

Relaciones RDBM ..................................................................................................................... 9

5. NEO4J BASE DE DATOS ORIENTADA A GRAFOS ....................................................... 10

5.1 Rendimiento ................................................................................................................ 10

5.2 Flexibilidad ................................................................................................................... 10

5.3 Modelo orientados a grafos ........................................................................................ 11

5.4 Construcción de un modelo de grafos ........................................................................ 11

5.5 CREAR DE UN GRAFO NEO4J ................................................................................. 12

6. LENGUAJE PARA GRAFOS ............................................................................................ 13

6.1 CYPHER QUERY LANGUAGE (CQL) ........................................................................ 13

6.1.1 Crear un schema NEO4J .................................................................................... 13

6.1.2 Crear un Nodo NEO4J ........................................................................................ 13

6.2 CLAUSULAS EN CYPHER ......................................................................................... 14

7. ACTUALIZACION NEO4J .................................................................................................. 15

7.2 ELIMINACION CQL ..................................................................................................... 15

7.3 NEO4J RESTRICCIONES .......................................................................................... 15

7.3.1 UNIQUES PACIENTE ......................................................................................... 15

7.4 FUNCIONES ............................................................................................................... 15

7.4.1 RETORNAR UNA PROPIEDAD DEL NODO...................................................... 15

7.4.2 ASIGNAR POR DEFECTO HORA Y TIEMPO TIMESTAMP ............................. 15

7.5 RELACIONES ENTRE NODOS ................................................................................. 16

7.5.2 EL CONSULTORIO GENERA UNA CONSULTA AL PACIENTE .......................... 16

7.5.3 EL PACIENTE INGRESA AL CONSULTORIO EL CONSULTORIO GENERA LA

CONSULTA QUE EL MEDICO ATIENDE .............................................................................. 16

8. CONSULTAS NEO4J ........................................................................................................ 16

Page 3: Documento NEO4J (4)

8.1 Listar los pacientes de codigo menor o igual a 555555555 ........................................ 16

8.2 Listar el medico con codigo 329 .................................................................................. 16

8.3 LISTAR LOS PACIENTES QUE HAN INGRESADO AL CONSULTORIO ................. 16

8.4 LISTAR LOS PACIENTES QUE HAN SIDO ATENDIDOS POR UN MEDICO .......... 16

9. CONCLUSIONES ................................................................................................................ 17

10. BIBLIOGRAFIA ................................................................................................................... 18

Page 4: Documento NEO4J (4)

1. INTRODUCCION

Para hablar de Neo4j se empezara comentando la propia definición que se le da en internet,

relacionando el termino con una base de datos orientada a grafos escrita en Java, primamente

y para que este concepto se clarifique al referirnos se puede decir que la información se

almacena de forma relacionada formando un grafo dirigido entre los nodos y las relaciones

entre ellos. Esta base de datos muy fácilmente se puede manejar con múltiples lenguajes

como Java, PHP, Ruby, .Net, Python, Node, Scala, etc. Ya su vez se utiliza en redes sociales a

manera de ejemplo.

Lo que hace a esta base de datos ser interesante con respecto a las otras es que puede

simplificar de manera rápida el trabajo a la hora de que crea nodos y estos se relacionan entre

si ampliando el concepto de grafo, es importante mencionar que las relaciones en Neo4J son

unidireccionales; van de un nodo a otro. Pero no es necesario crear relaciones en el sentido

opuesto si no es necesario, ya que se pueden buscar las relaciones indicando el sentido de las

mismas. Para esto hay que considerar que la dirección se define desde el nodo que estamos

utilizando.

Cypher es el lenguaje utilizado para utiliza tanto los índices como los "traversals" para obtener

datos. En la documentación de esta base de datos se encontró el ejemplo de obtener todas las

películas rodadas en el año 1999 mediante un acceso al índice de propiedades de películas, y

luego mediante un "traversal" obtenemos las mascotas de los actores de dichas películas.

Neo4j ha desarrollado un servidor que permite hacer operaciones básicas con los grafos, como

exportar/importar, visualizar, manipular, ejecutar consultas en una consola, etc. Éste será el

primer paso antes de implantarlo en un sistema propio.

Page 5: Documento NEO4J (4)

2. MARCO TEORICO

Neo4j es una base de datos de grafos diseñada y construida para ser robusta y optimizada

para grafos en vez de tablas es un tipo de sistema de administración de bases de datos de

grafos. Esta herramienta permite diseñar grafos gráficamente. Permite almacenar billones de

nodos y aristas. Los nodos y aristas pueden contener propiedades y valores.Neo4j es más

enfocada a almacenar relaciones entre valores lo cual permite almacenar gran cantidad de

datos-

Hay varios lenguajes que interoperan con Neo4j: Cypher, Consola de Ruby, Gremlin, interface

REST, los cuales permiten realizar consultas tales como los nodos que cumplen con una

condición, los nodos relacionados con una arista, aristas conectados con un nodo, el camino de

acceso entre dos nodos (path) y aplicar funciones de mapeo y reducción. Para acelerar las

búsquedas Neo4j permite construir índices por valores de claves e incorpora Lucene para

construir índices invertidos.

Neo4j es un sistema de administración de bases de datos que garantiza las propiedades de

aislamiento, consistencia, atomicidad y permanencia de una transacción (Redmond et ál.,

2012).

Page 6: Documento NEO4J (4)

3. BASE DE DATOS RELACIONAL RDBM

3.1 Construcción de un modelo relacional

El modelo relacional se basa en la noción matemática de relación. Codd y otros extendieron la

noción para aplicarla al diseño de bases de datos. Por ende, fueron capaces de sacar ventaja

del poder de la abstracción matemática y de la expresividad de la notación matemática para

desarrollar una estructura simple, pero poderosa para las bases de datos, Su idea fundamental

es el uso de "relaciones". Estas relaciones podrían considerarse en forma lógica como

conjuntos de datos llamados "tuplas". Esto es pensando en cada relación como si fuese una

tabla que está compuesta por registros (las filas de una tabla), que representarían las tuplas,

y campos (las columnas de una tabla). La información puede ser recuperada o almacenada

mediante "consultas" que ofrecen una amplia flexibilidad y poder para administrar la

información.

Ilustración 1 Modelo relacional Consulta Medica

Page 7: Documento NEO4J (4)

3.2 CREACION UNA BASE DE DATOS MODELO RELACIONAL

Nuestro sistema gestor de base de datos elegido es posgrest,procedemos a crear una nueva

base de datos llamada entidad

Ilustración 2 Nueva Base de Datos RDBM

Ilustración 3 Base de datos Creada correctamente

Page 8: Documento NEO4J (4)

4. LENGUAJE RELACIONAL SQL

El SQL: (lenguaje estructurado de consulta), es el lenguaje estándar ANSI/ISO de

definición, manipulación y control de bases de datos relacionales. Es un lenguaje

declarativo: sólo hay que indicar qué se quiere hacer

Crear un esquema RDBM

CREATE SCHEMA Persona;

Crear un tabla RDBM

CREATE TABLE "Persona"."paciente" (

"pac_codigo" varchar(20) COLLATE "default" NOT NULL,

"pac_nombre" varchar(30) COLLATE "default" NOT NULL,

"pac_apellido" varchar(30) COLLATE "default" NOT NULL,

"pac_regimen" varchar(20) COLLATE "default" NOT NULL,

"pac_sexo" varchar(10) COLLATE "default" NOT NULL

)

Insersion de datos RDBM

INSERT INTO "Persona"."paciente" VALUES ('10546', 'CARLOS', 'ALBERTO', 'SUBSIDIADO',

'MASCULINO');

INSERT INTO " Persona "."paciente" VALUES ('10547', 'PEDRO', 'ROCIO', 'contribuyente', 'masculino');

Actualizar RDBM

UPDATE "public"."paciente" SET "pac_regimen"='contribuyente' WHERE ("pac_codigo"='10546')

Eliminar RDBM

Page 9: Documento NEO4J (4)

DELETE FROM "public"."paciente" WHERE ("pac_codigo"='10547')

Restricciones RDBM

ALTER TABLE "public"."paciente" ADD CHECK ((lower((pac_sexo)::text) ~~ '%masculino%'::text) OR

(lower((pac_sexo)::text) ~~ '%femenino%'::text));

ALTER TABLE "public"."paciente" ADD CHECK ((lower((pac_regimen)::text) ~~ '%contribuyente%'::text)

OR (lower((pac_regimen)::text) ~~ '%subsidiado%'::text));

Relaciones RDBM

ALTER TABLE "public"."paciente" ADD PRIMARY KEY ("pac_codigo");

CREATE TABLE "public"."consultorio" (

"con_codigo" varchar(20) COLLATE "default" NOT NULL,

"con_cama" varchar(30) COLLATE "default" NOT NULL,

"con_habitacion" varchar(30) COLLATE "default" NOT NULL,

"con_fecha" date DEFAULT ('now'::text)::date,

"con_hora" time(6) DEFAULT ('now'::text)::time with time zone,

"pac_codigo" varchar(20) COLLATE "default" NOT NULL

)

ALTER TABLE "public"."consultorio" ADD FOREIGN KEY ("pac_codigo") REFERENCES

"public"."paciente" ("pac_codigo") ON DELETE RESTRICT ON UPDATE CASCADE;

Page 10: Documento NEO4J (4)

5. NEO4J BASE DE DATOS ORIENTADA A GRAFOS

5.1 Rendimiento

Las bases de datos relacionales, cuyos rendimientos se deterioran en las consultas intensivas

y con un procesamiento de datos muy alto; las bases de datos con grafos ofrecen un

rendimiento que tiende a permanecer constante, así como el crecimiento de los datos. Esto se

debe a que las consultas se realizan de manera gráfica, recorriendo entre las relaciones

(aristas)que posea la base. Como resultado, el tiempo de ejecución de esta consulta es

proporcional solo al tamaño de la parte grafica que tenga que recorrer para satisfacer esta

consulta, en lugar del tamaño global del grafo

El conjunto de datos se hace más grande, el rendimiento tiende a permanecer, esto es porque

las consultas se localizan en una porción del grafo dando como resultado que el tiempo de

ejecución de la consulta es directamente proporcional a la parte del grafo atravesado para

satisfacer esa consulta ya que no atraviesa el grafo en general

5.2 Flexibilidad

Al desarrollador de aplicaciones le interesa conectar los datos permitiendo una estructura

donde el esquema que surja del conjunto de interés pueda crecer sin ningún problema.

Las bases de datos orientadas a grafos abordan directamente este tema, porque su modelo de

datos se expresa y se acomoda a las necesidad es del negocio de tal manera que se permite

moverá mayor velocidad en el problema. Los grafos son aditivos, lo que significa que

se pueden añadir nuevos tipos de relaciones, y nuevos nodos y sub-grafos a una estructura ya

existente sin alterar las consultas y la funcionalidad de la aplicación. Y, en general, esto tiene

consecuencias positivas para el desarrollador debido a la flexibilidad del modelo con grafos, lo

que también tiene tendencia a realizar menos migraciones para poder reducirlos gastos de

mantenimiento y el riesgo que conlleva.

Page 11: Documento NEO4J (4)

5.3 Modelo orientados a grafos

Ilustración 4 Modelo orientado a grafos Consulta Medica

5.4 Construcción de un modelo de grafos

Los grafos se construyen con nodos, relaciones y propiedades, Donde los nodos contienen a

las propiedades Y estas son almacenadas en pares key-values (clave-valor) los key son

cadenas y los valúes son arbitrarios o referentes al tipo de dato.

Conectar relacionar y conectar los nodos, estos siempre tiene una dirección y una etiqueta o

descripción (label) que añade semántica y claridad a la estructuración de los nodos

Al igual que los nodos, las relaciones también pueden tener propiedades. La posibilidad de

añadir propiedades a relaciones es particularmente útil para proporcionar metadatos

adicionales para el gráfico algoritmos, añadiendo semántica adicional a las relaciones

(incluyendo la calidad y Peso), y para limitar las consultas en tiempo de ejecución

Page 12: Documento NEO4J (4)

5.5 CREAR DE UN GRAFO NEO4J

1.

En una instalación típica de Windows a continuación se nos abrirá el siguiente panel donde

se nos presenta la opción de comenzar a correr nuestro servidor local, por defecto trae

asignado una carpeta llamada default donde se almacenaran cada uno de los nodos

creado, vamos a cambiar de acuerdo a nuestro modelo a desarrollar

Ilustración 6 Crear una carpeta contenedora Entidad

Creamos una nueva carpeta llamada entidad la cual será la contenedora o por decirse

grafo que almacenara nuestros nodos y propiedades, continuación la seleccionaremos y

procedemos a inicializar el servidor

Ilustración 7 Inicialización del servidor

Ilustración 5 Ventana de administración NEO4J en Windows

Page 13: Documento NEO4J (4)

6. LENGUAJE PARA GRAFOS

6.1 CYPHER QUERY LANGUAGE (CQL)

Cypher es un (pero compacto) de base de datos gráfica lenguaje de consulta expresivas sin

duda el idioma más fácil consulta gráfica para aprender, y es un gran base para aprender

acerca de los grafos. Cypher está diseñado para ser leído y entendido por los desarrolladores,

profesionales de bases de datos con facilidad, y accionistas de la empresa. Su facilidad de uso

se deriva del hecho que concuerda con la forma en que intuitivamente describimos gráficos

usando diagramas

6.1.1 Crear un schema NEO4J

Neo4j posee una noción de esquemas basado en los label. Una persona puede ser presentada

en un patrón como (person:Person), donde person es el label del nodo. De esta forma los

label funcionan de una manera similar al concepto de esquema

6.1.2 Crear un Nodo NEO4J

Los datos de grafos se almacenan en tuplas con múltiples atributos. Se pueden representan como grafos datos de mapas de rutas, redes sociales, datos de recursos y sus relaciones.

CREATE (paciente:Paciente{ pac_codigo:"1094270086",pac_nombre:"Mauricio",

pac_apellido:"Pedraza", pac_regimen:"subsidiado", pac_sexo:"masculino" })

CREATE (consultorio:Consultorio { con_codigo: '5555', con_cama: 'principal', con_habitacion: 'HBI001',

con_fecha: '01-08-2014',con_hora: '02:000',pac_codigo: '55'})

CREATE (medico:Medico{ med_codigo:329,med_nombre:"Jairo", med_apellio:"Varela",

med_telefono:3107546622 })

Page 14: Documento NEO4J (4)

6.2 CLAUSULAS EN CYPHER

START: MATCH RETURN WHERE CREATE and CREATE UNIQUE DELETE SET FOREACH UNION WITH

Page 15: Documento NEO4J (4)

7. ACTUALIZACION NEO4J

7.1 NODO PACIENTE

MATCH (paciente{ pac_codigo: "1094270086" }) SET paciente.pac_regimen = 'contributivo' RETURN

paciente

MATCH (consultorio{ con_codigo: '5555' }) SET consultorio.con_cama = '20' SET consultorio.pac_codigo

= ' 1094270086' RETURN consultorio

7.2 ELIMINACION CQL

MATCH (paciente:Paciente { pac_codigo:"1094270086"}) REMOVE paciente.pac_sexo RETURN paciente

MATCH (paciente:Paciente { pac_codigo:"1094270086"}) DELETE paciente

7.3 NEO4J RESTRICCIONES

7.3.1 UNIQUES PACIENTE

CREATE CONSTRAINT ON (paciente:Paciente) ASSERT paciente.pac_codigo IS UNIQUE

NODO REPETIDO ME DEVUELVE UN ERROR

CREATE (paciente:Paciente{ pac_codigo:"1094270086",pac_nombre:"Mauricio",

pac_apellido:"Pedraza", pac_regimen:"subsidiado", pac_sexo:"masculino" })

AL VIOLAR LA RESTRICCION MOSTRARA EL SIGUIENTE ERROR

Neo.ClientError.Schema.ConstraintViolation

7.4 FUNCIONES

7.4.1 RETORNAR UNA PROPIEDAD DEL NODO

MATCH (consultorio { con_codigo:"5555" })

RETURN consultorio.con_habitacion

7.4.2 ASIGNAR POR DEFECTO HORA Y TIEMPO TIMESTAMP

MERGE (consultorio:Consultorio { con_codigo: '5555'})

Page 16: Documento NEO4J (4)

ON MATCH SET consultorio.con_fecha = timestamp(),consultorio.con_hora =timestamp()

RETURN consultorio

7.5 RELACIONES ENTRE NODOS

Al relacionar el campo pac_codigo del nodo consultorio con pac_codigo de paciente se hace

innecesario esta propiedad en consultorio, ya que al momento de relacionar se crear un nuevo

nodo que contiene ambas relaciones.

7.5.1 EL PACIENTE INGRESA AL CONSULTORIO

MATCH (paciente:Paciente),(consultorio:Consultorio) WHERE consultorio.con_codigo = '5555' AND paciente.pac_codigo = '1094270086' CREATE (paciente)–[ingresa:INGRESA{ing_cod:8,con_codigo: consultorio.con_codigo,pac_codigo: paciente.pac_codigo }]->(consultorio) RETURN ingresa

7.5.2 EL CONSULTORIO GENERA UNA CONSULTA AL PACIENTE

MATCH (paciente)-[ingresa: INGRESA]->(consultorio) WHERE ingresa.pac_codigo = '1094270086' AND ingresa.con_codigo = "5555" CREATE (consultorio)–[genera:GENERA{gen_cod: timestamp() }]->(consulta:CONSULTA{con_codigo:'5555',pac_codigo:ingresa.pac_codigo}) RETURN ingresa,genera,consulta

7.5.3 EL PACIENTE INGRESA AL CONSULTORIO EL CONSULTORIO GENERA LA

CONSULTA QUE EL MEDICO ATIENDE MATCH (consulta:CONSULTA),(medico) WHERE medico.med_codigo = 329 AND consulta.con_codigo ='5555' CREATE (consulta)<–[atiende:ATIENDE{ati_cod: timestamp()}]– (medico) RETURN consulta,atiende,medico

8. CONSULTAS NEO4J 8.1 Listar los pacientes de codigo menor o igual a 555555555 MATCH (paciente) WHERE paciente.pac_codigo <= '555555555' RETURN paciente.pac_codigo

8.2 Listar el medico con codigo 329 MATCH (medico) WHERE medico.med_codigo = 329 RETURN medico

8.3 LISTAR LOS PACIENTES QUE HAN INGRESADO AL CONSULTORIO MATCH (paciente)–[ingresa:INGRESA]->consultorio RETURN paciente,consultorio

8.4 LISTAR LOS PACIENTES QUE HAN SIDO ATENDIDOS POR UN MEDICO MATCH (paciente)–[ingresa]-> (consultorio) – [genera] -> (consulta) <- [atiende] –(medico) RETURN paciente

Page 17: Documento NEO4J (4)

9. CONCLUSIONES Se a podido concluir como funciona Neo4j, la creación de un grafo y el lenguaje Cypher el cual se basa principalmente en SQL, lo cual resulta familiar al trabajar y se hace simple la sintaxis en cuanto se va ejecutando, las consultas ya se pueden ir realizando a manera que se trabaja y de acuerdo a las necesidades que se vengan presentando. Neo4j a manera de ejemplo y para simplificar almacena dos cosas tanto nodos, como

relaciones. Un nodo puede ser un usuario y a relacionan vendría siendo cuando al usuario le

gusta el estado de otro, esto se logra teniendo una base de datos, a la cual se le debe indicar

el directorio donde van a estar contenidos todos los archivos, si este no existe pues se crea y

este es una base, si existe lee los datos encontrados ahí.

El rendimiento Neo4j es altamente dependiente de almacenamiento en caché, esto limita

mucho a Neo4j pero a la vez ayuda para que sea una base de datos altamente funcional y muy

utilizada por diferentes empresas y negocios por la agilidad de la búsqueda de la información,

también porque es de uso libre.

Page 18: Documento NEO4J (4)

10. BIBLIOGRAFIA

Robinson, I., Webber, J., & Efrem, E. (2013). Graph databases. Sebastopol, Calif.:

O’Reilly Media.

50 Shades of Graph: How Graph Databases Are Transforming Online Dating. (n.d.).

Forbes. Retrieved February 16, 2014.

Guía de referencia: http://docs.neo4j.org/chunked/milestone/preface.html´

Guía de neo4j: http://docs.neo4j.org/refcard/2.1/

Recursos de aprendizaje http://www.neo4j.org/learn

Charla de Michael Huger - Neo4j for Java Developers: https://www.youtube.com/watch?v=FCp68iGo0pY