Bases de datos orientadas a grafos

Publicado por

Índice

  1. Introdución
  2. ArangoDB
  3. Neo4j
  4. OrientDB
  5. Titan
  6. Conclusiones

1. Introducción

Este tipo de bases de datos utiliza la topología de un grafo con nodos como vértices y relaciones como aristas y propiedades, utilizada para almacenar y representar datos conectados sin necesidad de utilizar un índice (que es el método tradicional de simular una relación en una base de datos relacional). De esta forma, los vecinos de un nodo son accesibles directamente mediante una referencia directa, sin pasar por estructuras intermedias.

Estas bases de datos abordan uno de las grandes tendencias que tienen las empresas hoy en día: hacer uso de relaciones dinámicas y complejas en datos con muchas conexiones para generar conocimiento y ventaja competitiva.

Si tienes un problema que puedas modelar mediante relaciones entre datos, te interesará utilizar grafos, tanto para consultar como para almacenar datos de cualquier tipo y tamaño.

En la vida real nos encontramos continuamente con este tipo de problemas: cómo se relacionan las personas que trabajan en una empresa y el conocimiento que poseen, la relación que existe entre lectores de blogs y el contenido de los artículos que leen o incluso cómo interactúan los clientes con los productos de una compañía.

2. ArangoDB

  • Open source, es multimodelo, sirve tanto para almacenar grafos, documentos y registros de clave/valor. Además unifica el lenguaje de consulta, independientemente del tipo de modelo y permite realizar la combinación de los datos de diferentes modelos. El core de Arango esta escrito en C++
  • Implenta operaciones ACID. Schemaless por naturaleza
  • De lo mejor que tiene ArangoDB es Foxx, un framework escrito en JavaScript para escribir micro-servicios HTTP centrados en datos que se ejecutan directamente dentro ArangoDB
  • Desarrollo ágil de aplicaciones
  • Lenguaje AQL , lenguaje que permite introducir funciones complejas en las consultas haciéndolas muy potentes
    • La curva de aprendizaje es corta
    • Con una sola query te puedes traer todos los datos que necesites
  • Se pueden implementar validaciones y lógicas propias en la capa de base de datos, interceptando los datos que entren o salgan del servidor
  • Proporciona acceso via REST utilizando Foxx bastante complicada de depurar.
  • Al ser schemaless, si le pides un atributo que no existe, te devuelve un valor nulo, en vez de generar un error, este sería un aspecto a mejorar
  • Mucho potencial en el mundo de las bases de datos de grafos, compatible con cálculos complejos. La elección del motor de almacenamiento es el adecuado para procesar Big Data. Buen apoyo de la comunidad y buen soporte en github
  • Ofrece un gran rendimiento, permite utilizar Joins de manera sencilla
  • Ejemplo de caso de uso: (recomendaciones)
    • Identificar las relaciones entre los usuarios dependiendo del contenido que consumen y de la estructura subyacente del producto (noticias, contenido de medios, etc…).  La BD permite procesar rápidamente las consultas para el cálculo de relaciones, de manera que la latencia entre la solicitud de usuario y la recomendación se reduce considerablemente

3. Neo4J

  • Base de datos exclusivamente de grafo. Tiene implementado el almacenamiento nativo para grafos. Transaciones ACID (Atomicity, Consistency, Isolation and Durability)
  • El lenguaje de consulta es Cypher, NO es tan intuitivo cuando deseamos realizar consultas complejas. Aquí tenemos una curva de aprendizaje con más pendiente que AQL.
  • La relación precio-rendimiento es muy buena, Neo4j es muy, muy rápido y puede escalar horizontalmente suavemente (mil millones de nodos y varios miles de millones de relaciones entre ellos es perfectamente realizable)
  • Otro punto a favor de Neo4j es su forma fácil y natural de representar gráficos, permite modelar realidades complejas y descubrir interconexiones y relaciones no obvias entre las entidades o nodos, también se utiliza para descubrir patrones ocultos en los datos.
  • Caso de uso:
    • Modela las relaciones que tienen los datos, por ejemplo, se puede utilizar para construir un core alrededor de Neo4j con todas las fuentes de información disponibles de MDM (Master Data Management) y podemos obtener patronnes de acceso o de comportamiento
    • Podemos ver casos de uso en el mundo empresarial como: ofrecer productos personalizados o recomendaciones de servicio; añadir capacidades sociales a los sitios web; las telcos pueden utilizarlo para identificar y diagnosticar problemas de red.
  • Si hay que poner un defecto a Neo4j es la escalabilidad, las escrituras se basan en un modelo master-esclavo en el que el master se ocupa de realizar la escritura y de las réplicas, por lo que solo escala de forma natural cuando tiene que repartir lecturas

4. OrientDB

  • El core esta escrito en Java. Fácil de entender y utilizar, la curva de aprendizaje es muy suave. Proporciona servicios REST.
  • Puede guardar 220.000 registros por segundo. Soporta esquema-less, full and mixed
  • Multi modelo, registro de clave-valor, documentos y grafos
  • El rendimiento es excelente y el lenguaje de consulta, al ser un híbrido del estándar SQL & Graph, la adopción es más fácil que si usas Gremlin (Apache TinkerPop) o Cypher (Neo4j), los cuales al principio se ven muy bien, pero la complejidad de la consulta puede crecer rápidamente y tener problemas
  • Replicación y sharding. Las consultas son muy rápidas
  • Dispone de conectores JDBC
  • Seguridad: autenticación, passwords y encriptación a nivel REST
  • Incluye la utilidad Teleporte para sincronizar los datos almacenados en una base de datos relacional, y así poder migrar a una base de datos grafo.
  • El motor o modelo de los gráficos no admite demasiada concurrencia en línea en tiempo real (OLTP)
  • Es un software de pago, y según escalemos, habrá que tenerlo en cuenta
  • Se podría mejorar el uso de los diferentes tipos de drivers
  • Casos de uso:
    • Análisis de redes sociales

5. Titan

  • Es una base de dato de gráficos escalable optimizada para almacenar y consultar gráficos que contienen cientos de miles de millones de vértices (node) y bordes (edges) en un clúster de varias máquinas. Es una base de datos transaccional que puede admitir miles de usuarios simultáneos que ejecutan cruces de grafos complejos en tiempo real
  • Está escrita en Java
  • Integración con HBase, Hadoop, Cassandra y BerkeleyDB. También se puede utilizar un motor de procesamiento de datos como es Spark. Se integra también con herramientas de indexación como Solr o Elastic
  • TitanDB utiliza Gremlin 3, un dialecto de consulta con mucha documentación, diapositivas y grabaciones en youtube. La documentación es una de los aspectos por las cuales usar Titán se vuelve realmente fácil
  • TitanDB es complejo al principio y puede ser un buen reto para personas que no tengan mucha experiencia, ya que no solo tienes que desplegar el server de Titan, también hay que desplegar una base de datos y un motor de búsqueda (Solr, ElasticSearch y Lucene)
  • Titán todavía es muy joven, v1.0.0 lo que significa bugs y habrá que tener mucho cuidado con los despliegues en produción
  • Sus puntos fuertes son la gran capacidad de almacenar grafos enormes y la posibilidad de que multitud de usuarios soliciten concurrentemente la información de un grafo.

6. Conclusión:

¿Qué planeas hacer con una base de datos de grafos?

  • Operaciones de red y TI
  • MDM
  • Forense y fraude
  • Personalización y recomendaciones
  • Optimización de recursos

Cuestiones que guiarían la elección:

  1. ¿Qué tipos de datos vamos a tener?
  2. ¿Se necesita que la generación de grafos sea dinámica?
  3. ¿Se necesita utilizar en real time?
  4. ¿Qué conexión se necesita? JDBC?
  5. ¿Como vamos a alimentar a la base de datos?¿Cuáles son las fuentes?
  6. ¿A cuántos usuarios hay que dar soporte concurrentemente?
  7. ¿Se quieren representar datos en un mapa? ¿Tenemos datos de geolocalización?
  8. ¿Se quiere utilizar un lenguaje similar a SQL?

Al final va a ser que Neo4j es el producto más maduro de todos y seguramente el que más garantias de buen funcionamiento ofrece. El único incoveniente será el tema de la escalabilidad, habría conocer el volumen de datos que nos gustaría manejar en Neo4j.

La mejor de todas las bases de datos de grafo es ArangoDB, hablan muy bien en todos los sitios, aunque además de tener un propósito de grafo, también permite almacenar documentos, parejas de clave-valor, es decir, si se quiere versatilidad me decantaría por esta. Además utiliza un lenguaje de consultas similar a SQL, lo que siempre ayuda cuando se empieza a utilizar una nueva tecnología.

Y si hablamos del mundo Big Data, la que más me ha llamado la atención por su capacidad de almacenamiento, procesamiento e integración con multitud de componentes del ecosistema Hadoop es Titan. Me parece una pasada, pero todavía van por la versión 1.0.0, lo que significa que todavía habrá multitud de bugs y para productivizar me parece precipitado.

OrientDB es una base de datos de grafo que no está preparada para la concurrencia de multitud de usuarios, pero que ofrece un gran rendimiento, y mucha velocidad de escritura/lectura.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s