Bases de Datos de Grafos: Casos de Uso y Opciones

Bases de Datos de Grafos

Actualmente, las bases de datos de grafos están ganando mucho interés, ya que pueden proporcionar herramientas de modelado de datos muy potentes que se ajustan mejor a cómo funcionan sus datos en el mundo real.

Esto puede permitir un gran nivel de flexibilidad para representar sus datos de una manera que tenga más sentido para todos los involucrados, al tiempo que aprovecha al máximo las interacciones complejas entre ellos.

Este artículo tiene como objetivo explorar exactamente qué son y dónde pueden encajar perfectamente en el panorama de su aplicación.

¿Qué es un grafo?

Antes de que podamos entender qué es una base de datos de grafos, primero debemos entender qué se entiende por un grafo.

En este contexto, una base de datos de grafos representa un grafo matemático. Específicamente, una base de datos de grafos generalmente será un grafo dirigido.

En términos matemáticos, un grafo es simplemente una colección de elementos, típicamente llamados nodos (también llamados vértices o puntos), que están unidos por relaciones. Cada nodo representa alguna información en el grafo, mientras que cada relación representa alguna conexión entre dos nodos.

Un grafo dirigido es un tipo especial de grafo donde los relaciones siempre tienen una dirección asociada a ellos. Por el contrario, un grafo sin dirección sería uno donde los relaciones son simplemente enlaces sin dirección asociada a ellos.

Una vez que empiezas a lidiar con los grafos, te involucras muy rápidamente en la teoría de grafos. Esta es una rama de las Matemáticas que se ocupa de las complejidades que los grafos pueden contener y de la mejor manera de obtener información de ellos.

Los grafos ya son frecuentes en el mundo real y en el desarrollo de software. Por ejemplo, cada vez que intenta utilizar un mapa de tubo o rastrear un árbol genealógico, está tratando con un grafo.

Incluso el uso de Internet a diario es el uso de un grafo. Cada computadora en Internet (servidores, enrutadores, conmutadores) es un Nodo, y cada conexión entre ellos es un Borde. Algunos elementos de la teroría de grafos son entonces muy importantes en la infraestructura utilizada aquí, para conectar correctamente las computadoras distantes entre sí de la mejor manera.

¿Qué es una base de datos de grafos?

En lo más básico, una base de datos de grafos es simplemente un motor de base de datos que modela los nodos y los relaciones en el grafo relacional como entidades de primera clase.

Esto le permite representar interacciones complejas entre sus datos en una forma mucho más natural y, a menudo, permite un ajuste más cercano a los datos del mundo real con los que está trabajando.

Las bases de datos de grafos a menudo carecen de esquemas, lo que permite la flexibilidad de una base de datos de documento o Valor / Clave, pero admiten relaciones de forma similar a la de una Base de datos relacional tradicional.

Sin embargo, esto no significa que no haya un modelo de datos asociado a la base de datos. Simplemente que hay más flexibilidad en la forma de definirlo, lo que a menudo puede llevar a una iteración más rápida de sus proyectos.

Todo esto es posible en otras soluciones de bases de datos, pero no siempre con la misma elegancia que en una base de datos de grafos y, a menudo, con tablas de enlaces o documentos anidados para lograr el mismo nivel de expresividad.

Las bases de datos de grafos también nos permiten aplicar la teoría de grafos a nuestros datos de manera eficiente, lo que nos permite descubrir conexiones de nuestros datos que de otra manera son difíciles de ver. Por ejemplo, rutas mínimas entre nodos o conjuntos disjuntos dentro de nuestros datos.

En una base de datos de grafos, podemos elegir modelar las entidades como nuestros nodos, y las relaciones como nuestros relaciones. Esto nos acerca más al modelo de documentos, donde solo tenemos dos tipos de Entidad, pero con el poder del modelo relacional, donde no tenemos que manejar enlaces entre entidades manualmente, y donde podemos atravesar fácilmente estos enlaces dentro de la base de datos en sí.

Esto podría verse más o menos así:

Aquí tenemos dos tipos diferentes de Nodos y tres tipos diferentes de arcos.


Aunque no se ve en el diagrama, los Nodos y los Arcos pueden contener datos, similares al modelo Relacional.


Por ejemplo, el arco "FRIENDS" contendría la fecha en que se creó la relación, permitiéndonos enumerar todos los amigos en el orden de tiempo.

Esto nos muestra rápidamente que tenemos toda la potencia a la que estamos acostumbrados desde el modelo Relacional, pero con la flexibilidad a la que estamos acostumbrados desde el modelo de documentos.

Ahora para responder una consulta de ejemplo "Encontrar todos los amigos de cualquier usuario que le haya gustado una de mis publicaciones, en orden alfabético de nombre de usuario".

Esto se puede resolver de la siguiente manera (utilizando el lenguaje de consulta Cypher)

MATCH (:User {id:{author}}) <-[:AUTHOR]- (:Post) <-[:LIKES]- (:User) <-[:FRIENDS]- (u:User) RETURN (u)


Esto en realidad no es muy diferente a la consulta de la Base de datos relacional, excepto que la consulta es mucho más legible y los enlaces son mucho más obvios.

También podemos ver claramente que hay una distinción entre Nodos y Relaciones aquí y que estamos siguiendo las relaciones de un nodo a otro. Incluso puede recorrer esta consulta simplemente trazando su dedo a través de las líneas nombradas en el diagrama de arriba.

Sin embargo, lo más importante es que no le estamos diciendo al motor de la base de datos cómo vincular los Nodos. Simplemente le decimos que siga una Relación de cierto tipo y maneje todo para nosotros automáticamente. Ya no es necesario hacer coincidir las ID en diferentes tablas y esperar que se correspondan correctamente.

Cuándo usar una base de datos de grafos

Obviamente, una base de datos de grafos no siempre será la más adecuada para sus necesidades. Cada situación es diferente y necesita evaluar los requisitos todo el tiempo.

Lo más importante que debe hacer es evaluar su modelo de datos. Es muy probable que sea altamente relacional. La mayoría de los modelos de datos del mundo real son. En este caso, es probable que una Base de Datos de Grafos sea una buena opción para sus necesidades.

Luego, determine el tipo de relaciones que tienen sus datos. Si contiene una cantidad de relaciones de Muchos-a-Muchos, una Base de Datos de Grafos probablemente funcionará mejor para sus necesidades que una Base de Datos Relacional tradicional.

Incluso si contiene una cantidad de relaciones Uno-a-Uno o Uno-a-Muchos, una Base de Datos de Grafos puede hacer que esto sea más fácil de representar.

En tercer lugar, determine el esquema de sus datos.

Las bases de datos de grafos son generalmente mucho más flexibles en la forma en que le permiten almacenar datos, lo que permite una mayor fluidez de los datos presentes en cada ubicación.

Si sus necesidades de datos son tales que el esquema no es absolutamente rígido, entonces una base de datos de grafos puede ser una mejor opción, incluso si una base de datos relacional se ajusta a sus necesidades.

Finalmente, determine qué quiere hacer con sus datos.

Si desea realizar análisis de datos complejos o consultas potencialmente costosas que abarcan múltiples tipos de datos, una Base de Datos de Grafos puede hacer que esto sea más fácil de lograr y posiblemente haga que las consultas se ejecuten de manera más eficiente.

Opciones

Una vez que haya decidido que quiere usar una base de datos de grafos, el siguiente problema es decidir cuál usar.

Hay bastantes opciones disponibles, y vamos a cubrir brevemente algunas de ellas aquí para ayudar a determinar cuál es la mejor opción para su proyecto.

Las principales son:

Tenga en cuenta que estas no son las únicas opciones para elegir, por lo que debe investigar las opciones completamente antes de tomar una decisión.

Neo4J es probablemente el nombre que la mayoría de la gente piensa cuando escucha bases de datos de grafos. Es la opción más antigua y el nombre más conocido.

Sin embargo, no es tan rico en funciones como otras opciones, y posiblemente no tan eficiente.

JanusGraph, por otro lado, es un nombre muy nuevo en la escena de la base de datos de grafos. Ha estado en desarrollo desde 2012, pero tuvo su primer lanzamiento en 2017.

Se está trabajando bajo The Linux Foundation y es completamente gratuito para que cualquiera pueda usar o contribuir en el proyecto.