Primeros pasos con Neo4j

1 2 ...
Author: Gil Meno
0 downloads 2 Views

1

2 Primeros pasos con Neo4jUbaldo Taladriz. (Basada en la presentación de Andreas Kollegger)

3 Bases de datos de grafos101 Características de Neo4j Agenda Bases de datos de grafos101 Características de Neo4j Casos de usos de Neo4j Acción en vivo 3

4 Bases de datos de grafos101 (¿Qué es un grafo?)4

5 ¿Bases de datos de grafos?no: No tienen por objetivo almacenar imágenes o gráficos vectoriales si: almacenan data estructurada en forma de grafos ¿Recuerdan las listas enlazadas, los árboles? Los grafos son estructuras de propósito general para almacenar y modelar datos “Una base de datos tradicional, puede responderte rápidamente el promedio de ingresos de todos los que asisten a esta charla, Pero una base de datos de grafos, puede decirte quien de ellos es más probable que te invite una cerveza.” 5

6 G=(V,E) Un (Grafo) –almacena datos en- (Nodos)Un (Grafo) –almacena datos en- (Relaciones) (Nodos) se –organizan- (Relaciones) (Nodos y Relaciones) -tienen- (Propiedades) Neo4j almacena datos en una Grafo de Propiedades Nodos == Vértices. Relaciones == Arcos o enlaces 6

7 Consultas de grafo como recorridos (Traversal Queries)Un (Recorrido) -navega- un (Grafo) Un (Recorrido) -identifica- (Rutas) (Rutas) -ordenan- (Nodos) Un Recorrido (Traversal) es un query para datos conectados 7

8 Los Índices encuentran Nodos y RelacionesUn (Índice) -indexa- (Nodos o Relaciones) Un (Índice) es un Recorrido –especial- Un Índice es una búsqueda rápida para Nodos y Relaciones 8

9 Neo4j es una Base de datos de GrafosEs un grafo de propiedades con Nodos y Relaciones y ambos pueden tener Propiedades Perfectos para datos complejos y conectados Una Base de datos de grafos: Alto desempeño y alta disponibilidad (Escalamiento de lectura) Soporte sólido y real para transacciones ACID Escalable: 32 miles de millones de Nodos, 32 miles de millones de Relaciones, 64 miles de millones de Propiedades Servidor con una API REST o empotrable como una biblioteca Java 9

10 Casos de usos para los grafos10

11 P: ¿Para qué son buenos los grafos?R: datos complejos y conectados Recomendaciones Inteligencia de negocios Computación Social Geoespacial MDM Administración de sistemas Genealogía Cálculos sobre Series de tiempo Indexación de datos Logística Y más! 11

12 Master Data ManagementRecorridos ad-hoc Responsabilidad Detección de conflictos Cálculo de compensaciones Cálculo de comisiones 12

13 Administración de redesAnálisis de tipo qué pasa si Análisis de causa raíz Costos operacionales Administración de tolerancia a fallas 13

14 Geoespacial Objetos conectados espacialmente Operaciones GISTransportDublin Powered by Neo4j Datos de OpenStreetMap 14

15 y... Acción! 15

16 Neo4j Community EditionInstalación de Neo4j Community... Ir a Selecciona el espectacular botón “Download Neo4j Now” Descompacta el archivo O... Puedes probarlo en vivo en 16

17 NEO4J_HOME – el directoriobin – contiene todo para iniciar el servidor y herramientas complementarias conf – Configuración del servidor data – Directorio donde se almacenan los datos doc – Material de apoyo, incluyendo el manual de Neo4j examples – Ejemplos en código Java lib – todos los archivos jar necesarios para empotrar Neo4j plugins – todo lo necesario para agregar nuevas funciones a la base de datos (son como procedimientos almacenados) system – cosas que dan miedo  17

18 Tiempo de iniciar el servidorUNIX/LINUX/OSX: ./bin/neo4j console Windows: doble click en el archivo Neo4j.bat Para ver los logs: data/log/neo4j.0.0.log Entre los mensajes de inicio , debería aparecer algo como: INFO: Server started on [http://xxx.xxx.xxx.xxx:7474/] 18

19 Webadmin – una cara amistosaDashboard – provee un vistazo general a las estadísticas de la base de datos Data browser – manipulación directa de los grafos Console – consulta y scripting para los grafos Server Info – todos los detalles de información administrativa del servidor Index Manager – Creación y eliminación de los índices creados por omisión (default) 19

20 Data browser click en el botón “+ Node” y agregar algunos nodosEl número que se incrementa es el “Node ID” o Id del nodo La URL REST URL para cada no es desplegada un poco más abajo click en el botón “+ Relationship” Las relaciones tienen una dirección desde “From”, hasta “To” Cambiar el tipo de relación “Type” a “KNOWS” Utilizar el nodo 0 como “To” ingresando el valor “0” Agregar para todos los nodos ingresados la relación 20

21 Data Browser, continuación...Agregando propiedades Buscar cada nodo ingresando su ID en el campo buscar click en el botón “+ Add Property” Agregar la propiedad“name” properties, con un valor de tipo Stirng Repetir estos pasos para cada uno de los nodos Con esto hemos creado un grafo simple de redes sociales. ¿Cómo se ve? 21

22 Data browser, visualizaciónClick en el botón de mini-grafos, para obtener una visualización La barra de búsqueda puede ser utilizda para establecer el foco inicial del subgrafo. Al hacer Click sobre los nodos grises, se expanden los subgrafos 22

23 Yo & Mis amigos- por ejemplo23

24 Los amigos de mis amigos24

25 Gremlin – lenguaje script de grafos Cypher – Consultas “a la” SQL Webadmin Console Gremlin – lenguaje script de grafos Cypher – Consultas “a la” SQL http – acceso directo REST 25

26 Gremlin Es un DSL (Domain Specific Language) para grafos Ejemplos:g – el grafo propiamente tal g.v(0) – nodo 0 g.v(0).in – nodos conectados al nodo 0 g.v(0).in.name – el nombre de esos nodos (name es una propiedad) g.v(1).out(“KNOWS”) – todos los nodos con una relación “KNOWS” saliente del nodo 1. Detalles sobre Gremlin: https://github.com/tinkerpop/gremlin 26

27 Gremlin – Consultando por los amigos de mis amigos// Gremlin – Contando los amigos de los amigos de Andreas m=[:] andreas = g.v(0) andreas.out('KNOWS').out('KNOWS').name.groupCount(m) recommend = m.sort{a,b -> b.value <=> a.value } 27

28 Cypher Un lenguaje declarativo, “a la SQL” Ejemplos: obtiene el nodo 0start a=(0) return a obtiene el nodo 0 start a=(1) match (a)-->(b) return b Recorrido desde el nodo 1 a todos los nodos salientes start a=(1) match (a)--(b) where b.name=”Emil” return b Búsqueda de un amigo que se llame “Emil” detalles sobre Cypher en: 28

29 Cypher – Consulta de los amigos de mis amigos// Cypher – calce desde andreas a los amigos de sus amigos start andreas=(1) match (andreas)-[:KNOWS]->(friends) -[:KNOWS]->(foafs) return foafs 29

30 HTTP console Un lugar para experimentar con la API REST Ejemplos:get / - La URL raíz del servidor get /db/data – La raíz del acceso a datos get /db/data/node/0 – Nodo 0 get /db/data/node/0/relationships/in – relacioenes entrantes details of the REST API: 30

31 neo4j-shell – acceso por línea de comando./bin/neo4j-shell Se cnecta a la instancia de neo4j server, que se este ejecutando Funciona de manera similara la un “directory browser” Ejemplos: ls – Muestra detalles del nodo inicial, 0 cd 2 – cambiar al directorio del nodo“directory” start ... – para ejecutar un query Cypher details: 31

32 Un tour por el código 32

33 ¿Java? Se puede utilizar Spring Data Neo4jDesarrollo basado en anotaciones POJO optional “Persistencia políglota” Proyecto: Código: https://github.com/SpringSource/spring-data-neo4j 33

34 ¿Neo4j empotrado (Embedded) ? La API nativa es la respuestaEjemplos en: ./examples/java/embedded 34

35 ¿Ruby on Rails? neo4j.rb es la respuestaSoporta ActiveModel https://github.com/andreasronge/neo4j 35

36 ¿Dónde aprender más? http://neo4j.org Unirse a la lista de correos ¿Preguntas? ¿Dónde aprender más? Unirse a la lista de correos Unete a un encuentro (meetup) o inicia uno. 36