¡Hola! ¿Conoces ArangoDB?

Si has visto algún episodio de “Cómo conocí a vuestra Madre?”, probablemente te suene la siguiente frase: “¡Hola! ¿Conoces a mi amigo Ted?”, dando lugar a una conversación en la que Ted y una desconocida se conocen y… ya veremos si surge algo más después.

Imitando a Barney, me gustaría presentarte un motor de bases de datos potente y versátil que llevo siguiendo e investigando desde hace un tiempo: ArangoDB.

Desde que mencioné a ArangoDB en este post, he querido profundizar en este producto que tanto está evolucionando y que tan fuerte se está posicionando en el mercado.

El lanzamiento de su última versión, la 3.2, es el mejor pretexto para hacerlo, pero antes de bucear en sus últimas novedades, conozcamos primero sus principios de diseño y arquitectura.

¿Qué es ArangoDB?

Es una base de datos multi-modelo combinando los modelos: Clave/Valor, Documentos y Grafos en un solo núcleo desarrollado en C++ y haciendo uso de un sólo lenguaje de consultas, AQL (ArangoDB Query Language). Esto le permite realizar consultas entre los diferentes modelos de datos indistintamente.

Al igual que el modelo documental, aprovecha que todo documento debe tener un identificador único para almacenar el resto de la información como valor asociado a dicha clave, un enfoque muy similar al que sigue, por ejemplo, Couchbase y que tan buenos resultados da.

Por otro lado, para ofrecer funcionalidades de grafos, hacen uso atributos _from y _to que permiten conectar la información. Esto, en conjunción con edge indexes, permite el procesado de consultas de grafos con un gran rendimiento.

Sin duda, el factor diferenciador en la arquitectura de ArangoDB para ser multimodelo es que se ha desarrollado a nivel de núcleo del producto pudiendo soportar consultas entre todos los tipos de datos sin tener que “cambiar” de contexto ni realizar complejas operaciones en memoria para procesar los datos.

Para ofrecer escalabilidad horizontal, propone un esquema CP (teorema de CAP) Master/Master en el que no hay puntos únicos de fallo. Esto significa que, como casi todas las tecnologías NoSQL, ante un problema de red, elige la consistencia de la información frente a la disponibilidad y que su arquitectura garantiza que ante un eventual fallo, no se colapse el sistema completo.

La estructura de un cluster en ArangoDB tiene diferentes componentes:

Agentes

Son el corazón de nuestro cluster, contiene los servicios de sincronización y selección de nodos del cluster. Para ello utiliza el algoritmo Raft Consensus, que garantiza la inexistencia de conflictos a la hora de gestionar consensos en sistemas distribuidos.

Coordinators

Los coordinadores son las instancias con las que se comunican los clientes, permiten ejecutar consultas, ya que conocen dónde están los datos y pueden optimizar dónde se ejecutan las consultas que se realicen.

Primary DBs

Son las instancias que actualizan los datos guardando porciones de datos y usando replicación síncrona para funcionar como líder o seguidor de la porción del dato. Estos son los que ejecutan las consultas, alguna parte o enteras a petición de los coordinadores.

Secondary DBs

Permiten la replicación del dato de manera asíncrona, ofreciendo que el dato sea eventualmente consistente. Debido a la asincronía, su existencia no impacta negativamente en el rendimiento de los nodos primarios. Son realmente útiles para realizar backups.

Otra de las características más particulares de ArangoDB es que soporta transacciones ACID. Lo primero que pensé al leerlo fue, ¡no puede ser! ¿una base de datos NoSQL que soporta ACID?

En esencia es cierto, pero tiene ciertas limitaciones que se deben conocer de antemano para no llevarnos a error. Básicamente, son capaces de garantizar transacciones ACID en entornos con una sola instancia o en entornos distribuidos siempre y cuando los datos se encuentren en el mismo nodo o las operaciones sean sobre el mismo documento.

Han creado un lenguaje declarativo (expresa qué debe buscar, pero no cómo debe obtenerlo) propio de consultas, se llama ArangoDB Query Language (AQL).

Es un lenguaje similar a SQL y, aunque incluya operadores y una semántica diferentes, con algo de experiencia en SQL, nos resultará sencillo hacernos a él. Consultas, joins, agregaciones, filtros, consultas geo-espaciales… son algunos de los más populares. Para modelar el contenido de nuestra base de datos utilizaremos JSON, ya que es un formato flexible y sencillo para representar información.

Además, incluye Foxx, un concepto novedoso que permite ejecutar microservicios dentro de ArangoDB simplificando la construcción de una arquitectura Data Centric.

El framework está basado en NodeJS y Express y trae integrado consigo la librería GraphQL-Sync para implementar un servidor GraphQL desde la propia base de datos.

Si bien es cierto que resulta interesante esta funcionalidad, hay que tener mucho cuidado a la hora de elegir su caso de uso. Debemos tener en cuenta que vamos a introducir otro elemento que consumirá recursos de nuestros Coordinadores.

Siempre que pruebo algo nuevo, uso su documentación como otro indicador para medir su madurez y calidad. Me gusta ver que se dedica tiempo y esmero a documentar un producto de tal manera que resulte útil, atractivo y sobretodo, intuitivo a la hora de navegar por páginas y páginas de contenido para encontrar lo que estoy buscando.

ArangoDB cumple muy bien en este aspecto, complementando la documentación técnica con casos de uso e información de situaciones concretas a las que muy probablemente tendrás que enfrentarte.

¿Qué novedades nos trae la versión 3.2 de ArangoDB?

RocksDB

Un nuevo motor de almacenamiento optimizado para grandes juegos de datos que ocupan más que la memoria que tenemos disponible. Trabaja manteniendo una copia de los datos calientes en memoria y la actualiza en función de la información que se utilice.

Desde sus primeras versiones ArangoDB ha utilizado mmfiles, un motor de almacenamiento optimizado para trabajar con todos los datos en memoria.

Por eso se mantiene como la opción por defecto para facilitar la migración de un datastore a otro, pero RocksDB supone una gran mejora con respecto a su antecesor, así que deberemos asegurarnos de configurar nuestro servidor haciendo uso de esta nueva característica.

Además, también escribirá los índices en disco. Esta es una nueva decisión que debemos tomar a la hora de configurar nuestro servidor/cluster.

Seguridad

Es otra de esas características que deben ser mejoradas con cada release. Al incluir RocksDB se puede almacenar encriptado el dato en disco dando un paso más hacia el cumplimiento de HIPPA.

Se integra LDAP como mecanismo de autenticación facilitando así la gestión de usuarios si ya disponemos de un directorio activo en nuestra organización.

Pregel

Pregel permite implementar algoritmos de búsqueda sobre grafos de manera distribuida para encontrar patrones. Han implementado vários, PageRank, Weakly y Strongly Connected Components entre otros, pero lo mejor es que podemos crear los nuestros propios.

Satellite Collections

Surge ante la necesidad de realizar joins entre dos colecciones, una grande y otra más pequeña almacenadas en diferentes nodos del cluster, lo que ocasiona grandes problemas de red, comunicación entre nodos y, por tanto, aumento en los tiempos de respuesta y un rendimiento pobre.

Con los Satellite Collections podemos definir que la colección, de tamaño de un shard, se almacene de manera síncrona en todos los DBServers facilitando así la ejecución en el mismo nodo del join evitando la transferencia de red y la pérdida de rendimiento.

Con todas las características mencionadas, y algunas otras que no han entrado en estos párrafos, es fácil imaginarse multitud de casos de uso basados en modelos de datos híbridos:

  • E-commerce: gestión del carrito de la compra con clave/valor, catálogo con JSON y cross-selling con grafos es un claro ejemplo de caso de uso con diferentes tipologías de almacenamiento y acceso al dato.
  • Redes Sociales: información de perfil y relaciones entre miembros y sus interacciones.
  • Gestión de flotas de vehículos: gestión de reparaciones, piezas, y usuarios de los vehículos.

Como se aprecia, ArangoDB está creando un sistema de almacenamiento potente, robusto y versátil capaz de competir con los grandes del mercado.

Es una tecnología que debemos tener en nuestro radar y considerarla cuando surjan nuevos retos tecnológicos ante nosotros.

Escribe un comentario