0% encontró este documento útil (0 votos)
34 vistas24 páginas

Consultas y Procesamiento en Grafos

El documento aborda las consultas en bases de datos de grafos, describiendo operaciones como adyacencia, alcance y pattern matching, y presentando lenguajes de consulta como Cypher y Gremlin. También se discuten modelos de procesamiento distribuido para grafos, como Apache Giraph, y se mencionan desafíos como el particionamiento de grafos y el manejo de grafos dinámicos. Finalmente, se detalla el almacenamiento en Neo4j y se proporcionan recursos adicionales sobre bases de datos de grafos.

Cargado por

Andres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas24 páginas

Consultas y Procesamiento en Grafos

El documento aborda las consultas en bases de datos de grafos, describiendo operaciones como adyacencia, alcance y pattern matching, y presentando lenguajes de consulta como Cypher y Gremlin. También se discuten modelos de procesamiento distribuido para grafos, como Apache Giraph, y se mencionan desafíos como el particionamiento de grafos y el manejo de grafos dinámicos. Finalmente, se detalla el almacenamiento en Neo4j y se proporcionan recursos adicionales sobre bases de datos de grafos.

Cargado por

Andres
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Consultas en

bases de
datos de
grafos

Bases de Datos No Relacionales


Instituto de Computación, FING, UdelaR – 2022
CC-BY Lorena Etcheverry [email protected]
¿qué es una consulta
sobre un grafo?

¿qué tipo de operaciones se hacen


sobre grafos?
Operaciones sobre grafos (i)
● Adyacencia: obtener los nodos adyacentes
a cierto nodo.
● Alcance: Ej: determinar si existe un camino
entre 2 nodos, y si existe cual es.
● Pattern matching: obtener sub grafos
isomórficos a cierto patrón dado.
● Agregación: derivar de un grafo valores
escalares agregados.
SPARQL para RDF
Gremlin (Apache Tinkerpop) y Cypher (Neo4j) para PGM
son lenguajes de consultas que soportan estos operadores
Cypher, algunas ideas básicas

Cypher como Data Definition Language


(emil:Person {name:'Emil'})
<-[:KNOWS]-(jim:Person {name:'Jim'})
-[:KNOWS]->(ian:Person {name:'Ian'})
-[:KNOWS]->(emil)

variables
Cypher como data query language

MATCH (a:Person {name:'Jim'})-[:KNOWS]->(b)-[:KNOWS]->(c),


(a)-[:KNOWS]->(c)
RETURN b, c

MATCH (a:Person)-[:KNOWS]->(b)-[:KNOWS]->(c),
(a)-[:KNOWS]->(c)
WHERE a.name = 'Jim'
RETURN b, c
Referencia del lenguaje Cypher
Más acerca de Cypher
Puedo especificar caminos de largo
arbitrario, sobre ciertas propiedades, etc

MATCH (p:Person {name:'Al Pacino'})-[*1..4]-(p1:Person)


RETURN DISTINCT p1

¡Cuidado!
No devuelve un grafo,
devuelve una tabla
Aún más
● Puedo usar funciones que implementan
algoritmos sobre los grafos
Ej: el camino más corto
Número de Bacon sobre el grafo de
películas
MATCH p=shortestPath((kevin:Person)-[r:ACTED_IN*]-(actor))
WHERE kevin.name='Kevin Bacon' AND actor.name='Al Pacino'
RETURN p, length(p)

● The Neo4j Graph Data Science Library


Pero aún no hay un standard

EDBT 2022, Keynote: Peter Boncz - The (sorry) State of Graph Database Systems
https://www.youtube.com/watch?v=aDoorU4X6Jk&t=423s
Otros modelos de procesamiento
de grafos
Las bases de datos de grafos resuelven
consultas en forma eficiente,
pero pueden no ser eficientes para
procesar iterativamente grafos grandes.

Algoritmos usados para análisis de grafos como


PageRank, conteo de triángulos, búsqueda de
componentes conexas, etc. requieren iterar
sobre el grafo.
Surgen entornos de procesamiento de grafos,
inspirados en Google Pregel1
Procesamiento distribuído.
Bajo intercambio entre procesos.
Tolerancia a fallas.
Paradigma “Think like a vertex”.

Apache Giraph es la implementación


opensource de Pregel.
1
Pregel: a system for large-scale graph processing.
G. Malewicz et al, SIGMOD 2010
Ejemplo: hallar componentes
débilmente conexas1
Componente conexa: existe un camino entre
cualquier par de nodos.
Componente débilmente conexa (WCC): se
ignora la dirección de las aristas.
1 2 4 5

3
6 7 8

VC1={1,2,3,6,7} VC2={4,5,8}

1 Management and Analysis of Big Graph Data: Current Systems and Open Challenges,
M.Junghanns et al. Hanbook of Big Data Technologies, Springer 2017
Procesamiento distribuído (i)

Master node (mn): coordina


Worker nodes (wn): realizan el cómputo.
El grafo se particiona entre los wn.

Cada wn conoce un conjunto de nodos y de


cada nodo:
- el valor asociado al nodo
- las aristas salientes con sus valores
- los ids de nodos en el otro extremo de las aristas
entrantes
Procesamiento distribuído (ii)
A 2 B A 2 B
5 5
1 1
4 4
3 3 8
6

C D 8 C 3 D 5
6 4 8
7 7
6 7
6

Modelo Modelo
“think like a vertex” “think like a graph”
Modelo de cómputo
Se basa en vertex compute function (vcf) que consiste en:
1) leer los mensajes entrantes
2) actualizar el valor del nodo
3) enviar mensajes a los nodos adyacentes

La invocación a la vcf se organiza en supersteps.

En cada superstep cada wn:


1) llama a la vcf para cada nodo activo
2) marca como inactivo un nodo si se llamó a voteToHalt()
3) recoge los mensajes de salida

Cuando todos los wn terminan se mandan los mensajes.


Los nodos que reciben mensajes pasan a activos.
Modelo de cómputo (ii)
Hallar componentes débilmente conexas en Apache
Giraph

void compute(Vertex v) {
if (getSuperstep() == 0)
v.setValue(v.getVertexID())
sendMessageToAllEdges(v.getVertexValue())
else
minValue = min(v.getMessages())
if (minValue < v.getVertexValue())
v.setVertexValue(minValue)
sendMessageToAllEdges(v.getVertexValue())
v.voteToHalt();
}
Modelo de cómputo (iii)
A 2 B
5
1
4
3

C D 8
6
7

Comunicación y sincro
Comunicación y sincro

Comunicación y sincro
Comunicación y sincro
A 1[1],2[2],3[3] 1[1],2[1],3[1] 1[1],2[1],3[1] 3[1]
B 4[4],5[5] 4[4],5[4] 4[4],5[4]
C 6[6] 6[3] 6[1] 6[1] 6[1]
D 7[7],8[8] 7[6],8[4] 7[3],8[4] 7[1]

Superstep 0 Superstep Superstep Ss 3 Ss 4


1 2
Algunos desafíos
● Particionamiento de grafos
– Es un problema NP-hard
– Soluciones aproximadas y estáticas
– ¿qué pasa cuando la cantidad de nodos cambia
por partición? Balance de carga
● Manejo y análisis de grafos dinámicos
● Visualización
● Construcción de benchmarks
Bases de datos de grafos: modelo
físico
Fuente: Timón-Reina, S., Rincón, M., & Martínez-Tomás, R. (2021). An overview of graph databases and their
applications in the biomedical domain. Database : the journal of biological databases and curation, 2021,
baab026. https://doi.org/10.1093/database/baab026
Sobre un RDBMS

Usando ● Búsqueda en índice O(log n) (depende de la implementación).

índices ● Atravesar un camino de largo m tiene un costo O(m log n)


● Índices en una sola dirección
Index-free adjacency

Objetivo: acceder al adyacente en O(1)

¿cómo se implementa?
Almacenamiento en Neo4j
● Datos almacenados en diferentes store files,
un por cada parte del grafo (nodos,
relaciones, propiedades y etiquetas)
● Registros de largo fijo:
– Permiten computar el offset fácilmente
● Punteros entre store files.
● Las listas de relaciones son doblemente
enlazadas.

¡Multiestructuras!
Ejemplo: nodos y relaciones

Fuente: Robinson, Ian, Jim Webber, and Emil Eifrem. Graph


databases: new opportunities for connected data. " O'Reilly
Media, Inc.", 2015. Chapter 6.
Material adicional
● Graph Databases, Ian Robinson et al,
O’Reilly 2015.
– http://graphdatabases.com/?ref=blog
● Documentación, cursos y videos de Neo4J
– https://neo4j.com/developer/

También podría gustarte