1. 17-Aug-17
1
SQL Server 2017
Bases de datos
Orientadas a Grafos
Bienvenida
• Ing. Eduardo Castro, PhD
• MVP de Microsoft SQL Server
• PASS Regional de Mentor
• PASS Board of Directors
• http://www.youtube.com/eduardocastrom
2. 17-Aug-17
2
Material de Referencia
Introduction to Graph Databases
Chicago Graph Database Meet-Up
Max De Marzi
Data Modeling with Graph Databases
Ross McNeely
Los datos están más conectados
• Texto (contenido)
• Hipertexto (punteros agregados)
• RSS (se unió a esos punteros)
• Blogs (añadido Pingbacks)
• Etiquetado (datos relacionados agrupados)
• RDF (datos conectados descritos)
• GGG (contenido + punteros + relaciones + descripciones)
3. 17-Aug-17
3
Los datos están más semi estructurados
• Si intentaste recopilar todos los datos de cada película que se
haya hecho, ¿cómo la modela?
• Actores, personajes, ciudades, fechas, costos, ratings,
espectaculos, venta de tickets, etc.
SQL
4. 17-Aug-17
4
Proveedores de NOSQL
Key Value Stores
• Highly Available Key-Value Store
• Modelo de datos:
• Asignación global de valores clave
• Tolerante a fallas altamente (típicamente)
• Ejemplos:
• Redis, Riak, Voldemort
5. 17-Aug-17
5
Key Value Stores : pros y contras
• Pros:
• Modelo de datos simple
• Escalable
• Contras
• Crea tus propias " foreign keys"
• Pobres para datos complejos
Column Family
• Basado en BigTable: Sistema de almacenamiento distribuido de
Google para datos estructurados
• Modelo de datos:
• Una tabla grande, con familias de columnas
• Map Reduce para consultas/procesamiento
• Ejemplos:
• HBase, HyperTable, Cassandra
6. 17-Aug-17
6
Column Family : pros y contras
• Pros:
• Soporta Simi-Structured Data
• Indexado naturalmente (columnas)
• Escalable
• Contras
• Pobres para datos interconectados
Bases de datos de documentos
• Modelo de datos:
• Una colección de documentos
• Un documento es una colección de valores clave
• Centrado en el índice, un montón de map-reduce
• Ejemplos:
• CouchDB, MongoDB
7. 17-Aug-17
7
Document Databases : pros y contras
• Pros:
• Modelo de datos simple y potente
• Escalable
• Contras
• Pobres para datos interconectados
• Modelo de consulta limitado a claves e índices
• Mapa reducir para consultas más grandes
8. 17-Aug-17
8
Graph Databases
• Modelo de datos:
• Nodos y relaciones
• Ejemplos:
• Neo4j, OrientDB, InfiniteGraph, AllegroGraph
Graph Databases: pros y contras
• Pros:
• Potente modelo de datos, tan general como RDBMS
• Datos conectados localmente indexados
• Fácil de consultar
• Contras
• Sharding (mucha gente trabajando en este tema)
• Escala razonablemente bien
• Requiere realambrar su cerebro
9. 17-Aug-17
9
RDBMS
Vivir en un mundo NoSQL
Complejidad
BigTable
Clones
Tamaño
Key Value
Store
Bases Datos
Documentos
Grafo
Bases
90% de
Casos de uso
Relacional
Bases
¿Qué es un grafo?
• Una representación abstracta de un conjunto de objetos donde
algunos pares están conectados por enlaces.
Object (vértice, nodo)
Enlace (arista, arco, relación)
10. 17-Aug-17
10
Introducción al modelo de grafos
Definición de grafo:
1"formalmente, un grafo es sólo una colección de vértices y aristas-o,
en un lenguaje menos intimidante, un conjunto de nodos y las
relaciones que los conectan."
Menos formal:
-un grafo es un conjunto de nodos, relaciones y propiedades.
-una red de objetos conectados.
Diversas clases de grafos
• Grafo no dirigido
• Grafo dirigido
• Pseudo grafo
• Grafo múltiple
• Hyper Graph
11. 17-Aug-17
11
Más clases de grafos
• Grafo ponderado
• Grafo etiquetado
• Grafo de propiedades
¿Qué es una base de datos basada en grafos?
• Una base de datos con una estructura de grafos explícita
• Cada nodo conoce sus nodos adyacentes
• A medida que aumenta el número de nodos, el costo de un paso
local (o hop) sigue siendo el mismo
• Más un índice para búsquedas
12. 17-Aug-17
12
En comparación con bases de datos relacionales
Optimizado para la agregación Optimizado para conexiones
Introducción al modelo de grafos
•Nodos (“vertices”)
•Relaciones (“edges”)
•Propiedades
Property
Graph
RM1
RM2
RM3
13. Slide 24
RM1 Los nodos contienen propiedades. Piense en los nodos como
documentos que almacenan propiedades en forma de pares de
valor de clave arbitrarios. Las claves son cadenas y los valores son
tipos de datos arbitrarios
Ross McNeely, 19-Jan-14
RM2 Relaciones conectan y estructuran nodos. Una relación siempre
tiene una dirección, una etiqueta y un nodo de inicio y un nodo
final, no hay relaciones que cuelguen. Juntos, una dirección y una
etiqueta de relaciones agregan sematic claridad a la estructuración
de nodos.
Ross McNeely, 19-Jan-14
RM3 Como nodos, las relaciones también pueden tener propiedades. La
capacidad de agregar propiedades a las relaciones es
particularmente útil para proporcionar metadatos adicionales para
algoritmos de gráficos, añadiendo semántica adicional a las
relaciones (incluida la calidad y el peso) y para las consultas de
restricción en tiempo de ejecución
Ross McNeely, 19-Jan-14
14. 17-Aug-17
13
Introducción al modelo de grafos
• Nodos representan entidadesNodos
Los nodos contienen propiedades. Piense en los nodos como
documentos que almacenan propiedades en forma de pares de
valor de clave arbitrarios.
nombre : juan
Introducción al modelo de grafos
• Se presentan como líneas entre los
nodosRelaciones
Relaciones conectan y estructuran nodos.
Direccion_Postal
15. 17-Aug-17
14
Introducción al modelo de grafos
• Las propiedades son valores acerca
del nodo o de la relaciónPropiedades
Las propiedades se pueden agregar a nodos y relaciones.
Permite crear semánticas adicionales a las relaciones.
Introducción al modelo de grafos
• Grafo básico
16. 17-Aug-17
15
¿Qué es una base de datos basada en grafos?
29
• Una base de datos basada en grafos es una colección de nodos (o
vértices) y aristas (o relaciones).
• Un nodo representa una entidad (por ejemplo, una persona o una
organización) y una arista representa una relación entre los dos
nodos que conecta (por ejemplo, los gustos o los amigos).
• Los nodos y aristas pueden tener propiedades asociadas a ellos.
¿Qué es una base de datos basada en grafos?
30
• He aquí algunas características que hacen que una base de datos
basada en grafos sea única:
• Las aristas o las relaciones son entidades de primera clase en una base de
datos de grafos y pueden tener atributos o propiedades asociados con
ellos.
• Una única arista puede conectar de forma flexible varios nodos en una
base de datos basada en grafos.
• Puede expresar fácilmente las consultas de coincidencia de patrones y de
navegación de múltiples saltos.
• Puede expresar fácilmente el cierre transitivo y las consultas polimórficas.
17. 17-Aug-17
16
En comparación con los almacenes de valor clave
Optimizado para simples look-UPS Optimizado para moverse a través de
datos conectados
En comparación con los almacenes de valor clave
Optimizado para "árboles" de datos Optimizado para ver el bosque y los
árboles, y las ramas, y los troncos
18. 17-Aug-17
17
Cuándo utilizar una base de datos basada en grafos?
33
• No hay nada que una base de datos de grafos pueda lograr, que
no se puede lograr utilizando una base de datos relacional.
• Sin embargo, una base de datos basada en grafos puede facilitar
la expresión de ciertos tipos de consultas.
• Además, con optimizaciones específicas, ciertas consultas pueden
realizarse mejor.
Cuándo utilizar una base de datos basada en grafos?
34
• Su decisión de elegir uno sobre el otro puede basarse en los
siguientes factores:
• Su aplicación tiene datos jerárquicos. El tipo Hierarchyid puede utilizarse
para implementar jerarquías, pero tiene algunas limitaciones. Por ejemplo,
no permite almacenar varios padres para un nodo.
• Su aplicación tiene relaciones complejas de muchos a muchos; a medida
que la aplicación evoluciona, se agregan nuevas relaciones.
• Es necesario analizar los datos y las relaciones interconectados.
20. 17-Aug-17
19
Introducción al modelo de grafos
Cómo se utiliza una BD
orientada a grafos?
• Moverse a través
de la base de
datos
Consulta
• Seguir las
relaciones de
nodo a nodo
Opciones de
resultados
• Un conjunto
• Una ruta (path)
• Un patrón
Introducción al modelo de grafos
Set Path Pattern
21. 17-Aug-17
20
Modelos relacionales y grafos
• Definir y acordar las entidades del dominio
• Definir las interacciones y las normas rectorasSimilitudes
• Pocos cambios desde modelo conceptual lógico a
físico
• Modelo de almacenamiento de los grafos
coincide con el modelo lógico
• Después de la definición inicial del dominio
realzamos el grafo en lugar de definir las tablas.
Diferencias
Modelos relacionales y grafos
• Relacional
• Grafo
22. 17-Aug-17
21
Características gráficas introducidas en SQL Server 2017
41
• Crear objetos de grafos
• Las extensiones de Transact-SQL permitirán a los usuarios crear
tablas de nodos o aristas. Ambos nodos y aristas pueden tener
propiedades asociadas a ellas. Dado que los nodos y aristas se
almacenan como tablas, se admiten todas las operaciones que se
admiten en tablas relacionales en la tabla nodo o arista.
CREATE TABLE Person (ID INTEGER PRIMARY KEY, Name
VARCHAR(100), Age INT) AS NODE;
CREATE TABLE friends (StartDate date) AS EDGE;
Los nodos y aristas se almacenan como tablas
42
23. 17-Aug-17
22
ASCII-Art
43
ASCII-Art
44
• Cypher utiliza ASCII-Art para representar patrones.
• Se rodean los nodos con paréntesis que parecen círculos, por
ejemplo (nodo).
• Si más adelante queremos hacer referencia al nodo, se daremos
una variable como (p) para la persona o (t) para la cosa.
• En las consultas reales, probablemente usaremos nombres de
variables más expresivos como (persona) o (cosa).
• Si el nodo no es relevante a su pregunta, también puede utilizar
paréntesis vacíos ().
24. 17-Aug-17
23
ASCII-Art
45
MATCH (node:Label) RETURN node.property
MATCH (node1:Label1)-->(node2:Label2)
WHERE node1.propertyA = {value}
RETURN node2.propertyA, node2.propertyB
ASCII-Art Patrones
46
friend-of-a-friend (user)-[:KNOWS]-(friend)-[:KNOWS]-(foaf)
shortest path: path = shortestPath( (user)-[:KNOWS*..5]-(other) )
collaborative filtering (user)-[:PURCHASED]->(product)<-
[:PURCHASED]-()-[:PURCHASED]->(otherProduct)
tree navigation (root)<-[:PARENT*]-(leaf:Category)-[:ITEM]-
>(data:Product)
25. 17-Aug-17
24
Neo4j
47
Encontrar a alguien que pueda ayudar a aprender Neo4j
48
MATCH (you {name:"You"})
MATCH (expert)-[:WORKED_WITH]->(db:Database {name:"Neo4j"})
MATCH path = shortestPath( (you)-[:FRIEND*..5]-(expert) )
RETURN db,expert,path
26. 17-Aug-17
25
Extensiones de lenguaje de consultas
49
• La nueva cláusula Match se introduce para admitir la coincidencia
de patrones y la navegación de múltiples saltos a través del Grafo.
La función Match utiliza la sintaxis de estilo ASCII-Art para la
coincidencia de patrones.
• Por ejemplo:
-- Buscar los amigos de John
SELECT Person2.Name
FROM Person Person1, Friends, Person Person2
WHERE MATCH(Person1-(Friends)->Person2)
AND Person1.Name = 'John';
Totalmente integrado en el motor de SQL Server
50
• Las extensiones gráficas están completamente integradas en el
motor de SQL Server.
• Utilizamos el mismo motor de almacenamiento, metadatos,
procesador de consultas, etc. para almacenar y consultar datos de
grafos.
• Esto permite a los usuarios consultar a través de sus datos grafos
y relacionales en una sola consulta.
• Los usuarios también pueden beneficiarse de la combinación de
capacidades gráficas con otras tecnologías de SQL Server como
Columnstore, Ha, R Services, etc.
• La base de datos de SQL Graph también admite todas las
funciones de seguridad y cumplimiento de normas disponibles
con SQL Server.
27. 17-Aug-17
26
Ecosistema
51
• Los usuarios se benefician de las herramientas y los ecosistemas
existentes que ofrece SQL Server.
• Herramientas como backup y restore, importación y exportación,
BCP acaba de trabajar fuera de la caja.
• Otras herramientas o servicios como SSIS, SSRS o PowerBI
trabajarán con tablas basadas en grafos, tal y como funcionan
con tablas relacionales.
Arquitectura de SQL Graph
52
• Los usuarios pueden crear un Grafo por base de datos.
• Un Grafo es una colección de tablas de nodos y aristas.
• Las tablas de nodos o aristas se pueden crear bajo cualquier
esquema de la base de datos, pero todas pertenecen a un Grafo
lógico.
• Una tabla de nodos es una colección de tipos similares de nodos.
28. 17-Aug-17
27
Arquitectura de grafos SQL
53
• Por ejemplo, una tabla nodos “Persona” contiene todos los nodos
de la “personas” que pertenecen a un Grafo.
• Semejantemente, una tabla arista (edge) es una colección de
aristas similares.
• Por ejemplo, “a edge table” de amigos contiene todos “edges”
que conectan a una persona con otra persona.
• Dado que los nodos y aristas se almacenan en tablas, la mayoría
de las operaciones admitidas en tablas regulares se admiten en
tablas de nodos o aristas.
Arquitectura de base de datos de SQL Graph
54
29. 17-Aug-17
28
Nodo Mesa
55
• Una tabla de nodos representa una entidad en un esquema de
grafos.
• Cada vez que se crea una tabla de nodos, junto con las columnas
definidas por el usuario, un valor implícito de $node_id se crea la
columna, que identifica de forma exclusiva un nodo dado en la
base de datos.
• Los valores en $node_id se generan automáticamente y son una
combinación de object_id de esa tabla de nodos y una
generación interna BIGINT valor.
• Sin embargo, cuando los $node_id se selecciona la columna, se
muestra un valor calculado en la forma de una cadena JSON.
Nodo Mesa
56
• Además, $node_id es una pseudo columna, que se asigna a un
nombre interno con una cadena hexadecimal.
• Al seleccionar $node_id de la tabla, el nombre de la columna
aparecerá como $node_id_<hex_string>.
• El uso de nombres de pseudo columnas en consultas es la forma
recomendada de consultar los $ internosnode_id debe evitarse la
columna y el uso del nombre interno con la cadena hexagonal.
• Se recomienda que los usuarios creen una restricción o índice
único en los $node_id columna en el momento de la creación de
la tabla de nodos, pero si no se crea uno, se crea
automáticamente un índice único y no agrupado por defecto.
30. 17-Aug-17
29
Tabla de arista
57
• Una tabla de aristas representa una relación en un Grafo.
• Los aristas siempre se dirigen y conectan dos nodos.
• Una tabla de aristas permite a los usuarios modelar las relaciones
de muchos a muchos en el Grafo.
• Una tabla de aristas puede o no tener ningún atributo definido
por el usuario en él.
• Cada vez que se crea una tabla Edge, junto con los atributos
definidos por el usuario, se crean tres columnas implícitas en la
tabla edge.
Edge Table
58
• $edge_id Identifica de forma única una arista dada en la
base de datos. Es una columna generada y el valor es una
combinación de object_id de la tabla Edge y una generación
interna BIGINT valor.
• $from_id Almacena los $node_id del nodo, desde donde se
origina el arista.
• $to_id Almacena los $node_id del nodo, en el cual el arista
termina.
31. 17-Aug-17
30
Representación de tablas de nodos y aristas
59
Metadatos
60
• En sys.tables is_node se establece en 1, que indica que la tabla es
una tabla de nodos y si is_edge se establece en 1, que indica que
la tabla es una tabla de aristas.
• La vista sys.columns contiene columnas adicionales graph_type y
graph_type_desc, que indican el tipo de la columna en las tablas
de nodos y aristas.
32. 17-Aug-17
31
Esquema de ejemplo
61
• Este ejemplo crea un esquema Grafo, como se muestra en la
figura 1, para una red social hipotética que tiene personas,
restaurantes. Estos nodos están conectados entre sí usando
edges de Friends, Likes, LivesIn and LocatedIn
Demostración
73