¿Qué es una base de datos gráfica? Una mejor forma de almacenar datos conectados

Valor-clave, orientado a documentos, familia de columnas, gráfico, relacional ... Hoy parece que tenemos tantos tipos de bases de datos como tipos de datos. Si bien esto puede dificultar la elección de una base de datos, facilita la elección de la  base de datos correcta . Por supuesto, eso requiere hacer su tarea. Tienes que conocer tus bases de datos. 

Uno de los tipos de bases de datos menos comprendidos es la base de datos de gráficos. Diseñada para trabajar con datos altamente interconectados, una base de datos de gráficos puede describirse como más "relacional" que una base de datos relacional. Las bases de datos gráficas brillan cuando el objetivo es capturar relaciones complejas en vastas redes de información. 

Aquí hay una mirada más cercana a qué son las bases de datos de gráficos, por qué son diferentes a otras bases de datos y para qué tipos de problemas de datos están diseñadas para resolver.

Base de datos gráfica frente a base de datos relacional

En una base de datos SQL o relacional tradicional, los datos se organizan en tablas. Cada tabla registra datos en un formato específico con un número fijo de columnas, cada columna con su propio tipo de datos (entero, hora / fecha, texto de forma libre, etc.).

Este modelo funciona mejor cuando se trata principalmente de datos de cualquier tabla. Tampoco funciona tan mal cuando está agregando datos almacenados en varias tablas. Pero ese comportamiento tiene algunos límites notables.

Considere una base de datos de música, con álbumes, bandas, sellos e intérpretes. Si quieres informar sobre todos los artistas que fueron presentados en este álbum por esa banda lanzada en estas etiquetas (cuatro tablas diferentes) tienes que describir explícitamente esas relaciones. Con una base de datos relacional, esto se logra mediante nuevas columnas de datos (para relaciones uno a uno o uno a muchos) o nuevas tablas (para relaciones de muchos a muchos).

Esto es práctico siempre que manejes un número modesto de relaciones. Si está tratando con millones o incluso miles de millones de relaciones (amigos de amigos de amigos, por ejemplo), esas consultas no escalan bien.

En resumen, si las  relaciones entre los datos , no los datos en sí, son su principal preocupación, entonces es necesario un tipo diferente de base de datos, una base de datos de gráficos.

Características de la base de datos de gráficos

El término "gráfico" proviene del uso de la palabra en matemáticas. Allí se usa para describir una colección de nodos (o vértices ), cada uno de los cuales contiene información ( propiedades ) y con relaciones etiquetadas (o bordes ) entre los nodos.

Una red social es un buen ejemplo de gráfico. Las personas en la red serían los nodos, los atributos de cada persona (como el nombre, la edad, etc.) serían las propiedades y las líneas que conectan a las personas (con etiquetas como "amigo" o "madre" o " supervisor ”) indicaría su relación. 

En una base de datos convencional, las consultas sobre relaciones pueden tardar mucho en procesarse. Esto se debe a que las relaciones se implementan con claves externas y se consultan uniendo tablas. Como cualquier administrador de bases de datos SQL puede decirle, realizar uniones es costoso, especialmente cuando debe clasificar una gran cantidad de objetos o, peor aún, cuando debe unir varias tablas para realizar el tipo de consultas indirectas (por ejemplo, "amigo de un amigo") en las que sobresalen las bases de datos de gráficos. 

Las bases de datos gráficas funcionan almacenando las  relaciones junto con los datos. Debido a que los nodos relacionados están vinculados físicamente en la base de datos, acceder a esas relaciones es tan inmediato como acceder a los datos en sí. En otras palabras, en lugar de calcular la relación como deben hacer las bases de datos relacionales, las bases de datos de gráficos simplemente leen la relación desde el almacenamiento. La satisfacción de las consultas es una simple cuestión de caminar o "atravesar" el gráfico.  

Una base de datos de gráficos no solo almacena las relaciones entre objetos de forma nativa, lo que hace que las consultas sobre relaciones sean rápidas y fáciles, sino que le permite incluir diferentes tipos de objetos y diferentes tipos de relaciones en el gráfico. Al igual que otras bases de datos NoSQL, una base de datos gráfica no tiene esquema. Por lo tanto, en términos de rendimiento y flexibilidad, las bases de datos de gráficos se acercan más a las bases de datos de documentos o almacenes de valores clave que a las bases de datos relacionales u orientadas a tablas.

Casos de uso de bases de datos de gráficos

Las bases de datos gráficas funcionan mejor cuando los datos con los que está trabajando están muy conectados y deben estar representados por la forma en que se vinculan o se refieren a otros datos , generalmente mediante relaciones de muchos a muchos.

Una vez más, una red social es un ejemplo útil. Las bases de datos gráficas reducen la cantidad de trabajo necesario para construir y mostrar las vistas de datos que se encuentran en las redes sociales, como los feeds de actividades, o determinar si es posible que conozca o no a una persona determinada debido a su proximidad con otros amigos que tiene en la red.

Otra aplicación para las bases de datos de gráficos es encontrar patrones de conexión en datos de gráficos que serían difíciles de descifrar a través de otras representaciones de datos. Los sistemas de detección de fraudes utilizan bases de datos gráficas para sacar a la luz relaciones entre entidades que, de otro modo, podrían haber sido difíciles de notar. 

De manera similar, las bases de datos de gráficos son un ajuste natural para las aplicaciones que administran las relaciones o interdependencias entre entidades. A menudo encontrará bases de datos de gráficos detrás de motores de recomendación, sistemas de administración de contenido y activos, sistemas de administración de identidad y acceso, y soluciones de administración de riesgos y cumplimiento normativo. 

Consultas de bases de datos de gráficos

Las bases de datos de gráficos, como otras bases de datos NoSQL, suelen utilizar su propia metodología de consulta personalizada en lugar de SQL.

Un lenguaje de consulta de gráficos comúnmente utilizado es Cypher, desarrollado originalmente para la base de datos de gráficos Neo4j. Desde finales de 2015, Cypher se ha desarrollado como un proyecto de código abierto independiente y varios otros proveedores lo han adoptado como un sistema de consulta para sus productos (por ejemplo, SAP HANA).

A continuación, se muestra un ejemplo de una consulta Cypher que devuelve un resultado de búsqueda para todos los amigos de Scott:

COINCIDIR (a: Persona {nombre: 'Scott'}) - [: AMIGO] -> (b) REGRESO b 

El símbolo de flecha ( ->) se utiliza en consultas Cypher para representar una relación dirigida en el gráfico.

Otro lenguaje común de consulta de gráficos, Gremlin, fue diseñado para el marco de computación de gráficos Apache TinkerPop. La sintaxis de Gremlin es similar a la utilizada por las bibliotecas de acceso a la base de datos ORM de algunos idiomas.

A continuación, se muestra un ejemplo de una consulta de "amigos de Scott" en Gremlin:

gV (). tiene ("nombre", "Scott"). out ("amigo de") 

Muchas bases de datos de gráficos son compatibles con Gremlin a través de una biblioteca, ya sea incorporada o de terceros.

Otro lenguaje de consulta más es SPARQL. Fue desarrollado originalmente por el W3C para consultar datos almacenados en el formato de Marco de descripción de recursos (RDF) para metadatos. En otras palabras, SPARQL no fue diseñado para búsquedas en bases de datos de gráficos, pero puede usarse para ellas. En general, Cypher y Gremlin se han adoptado de manera más amplia.

Las consultas SPARQL tienen algunos elementos que recuerdan a SQL, a saber,  SELECTy WHEREcláusulas, pero el resto de la sintaxis es radicalmente diferente. No piense en SPARQL como relacionado con SQL en absoluto, o para el caso con otros lenguajes de consulta de gráficos.

Bases de datos de gráficos populares

Debido a que las bases de datos gráficas sirven para un caso de uso relativamente específico, no hay tantas como bases de datos relacionales. En el lado positivo, eso hace que los productos destacados sean más fáciles de identificar y discutir.

Neo4j

Neo4j es fácilmente la más madura (11 años y contando) y la más conocida de las bases de datos de gráficos para uso general. A diferencia de los productos de bases de datos de gráficos anteriores, no utiliza un back-end SQL. Neo4j es una base de datos de gráficos nativa que se diseñó de adentro hacia afuera para admitir grandes estructuras de gráficos, como en consultas que devuelven cientos de miles de relaciones y más.

Neo4j viene en ediciones empresariales gratuitas de código abierto y de pago, y esta última no tiene restricciones en el tamaño de un conjunto de datos (entre otras características). También puede experimentar con Neo4j en línea a través de su Sandbox, que incluye algunos conjuntos de datos de muestra para practicar.

Consulte la revisión de Neo4j para obtener más detalles.

Microsoft Azure Cosmos DB

La base de datos en la nube de Azure Cosmos DB es un proyecto ambicioso. Su objetivo es emular varios tipos de bases de datos (tablas convencionales, orientadas a documentos, familia de columnas y gráficos) a través de un servicio único y unificado con un conjunto coherente de API.

Con ese fin, una base de datos gráfica es solo uno de los diversos modos en los que puede operar Cosmos DB. Utiliza el lenguaje de consulta Gremlin y la API para consultas de tipo gráfico, y es compatible con la consola Gremlin creada para Apache TinkerPop como otra interfaz.

Otro gran punto de venta de Cosmos DB es que la indexación, el escalado y la replicación geográfica se manejan automáticamente en la nube de Azure, sin ningún giro de perilla por su parte. Aún no está claro cómo la arquitectura todo en uno de Microsoft se compara con las bases de datos de gráficos nativos en términos de rendimiento, pero Cosmos DB ciertamente ofrece una combinación útil de flexibilidad y escala.

Consulte la revisión de Azure Cosmos DB para obtener más detalles.

JanusGraph

JanusGraph se bifurcó del proyecto TitanDB y ahora está bajo el gobierno de la Fundación Linux. Utiliza cualquiera de una serie de backends compatibles (Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB) para almacenar datos de gráficos, admite el lenguaje de consulta Gremlin (así como otros elementos de la pila Apache TinkerPop) y también puede incorpore la búsqueda de texto completo mediante los proyectos Apache Solr, Apache Lucene o Elasticsearch.

IBM, uno de los patrocinadores del proyecto JanusGraph, ofrece una versión alojada de JanusGraph en IBM Cloud, llamada Compose for JanusGraph. Al igual que Azure Cosmos DB, Compose para JanusGraph proporciona ajuste de escala automático y alta disponibilidad, con precios basados ​​en el uso de recursos.